package org.iatoki.judgels.uriel.models.daos.impls; import com.google.common.collect.ImmutableList; import org.iatoki.judgels.play.models.daos.impls.AbstractHibernateDao; import org.iatoki.judgels.uriel.models.daos.UserDao; import org.iatoki.judgels.uriel.models.entities.UserModel; import org.iatoki.judgels.uriel.models.entities.UserModel_; import play.db.jpa.JPA; import javax.inject.Named; import javax.inject.Singleton; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Root; import javax.persistence.metamodel.SingularAttribute; import java.util.List; @Singleton @Named("userDao") public final class UserHibernateDao extends AbstractHibernateDao<Long, UserModel> implements UserDao { public UserHibernateDao() { super(UserModel.class); } @Override public boolean existsByUserJid(String userJid) { CriteriaBuilder cb = JPA.em().getCriteriaBuilder(); CriteriaQuery<Long> query = cb.createQuery(Long.class); Root<UserModel> root = query.from(UserModel.class); query .select(cb.count(root)) .where(cb.equal(root.get(UserModel_.userJid), userJid)); return (JPA.em().createQuery(query).getSingleResult() != 0); } @Override public UserModel findByUserJid(String userJid) { CriteriaBuilder cb = JPA.em().getCriteriaBuilder(); CriteriaQuery<UserModel> query = cb.createQuery(UserModel.class); Root<UserModel> root = query.from(UserModel.class); query.where(cb.equal(root.get(UserModel_.userJid), userJid)); return JPA.em().createQuery(query).getSingleResult(); } @Override protected List<SingularAttribute<UserModel, String>> getColumnsFilterableByString() { return ImmutableList.of(UserModel_.roles); } }