/* * Hibernate, Relational Persistence for Idiomatic Java * * License: GNU Lesser General Public License (LGPL), version 2.1 or later. * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.jpa.test.criteria.enumcollection; import java.util.List; import java.util.Set; import javax.persistence.EntityManager; import javax.persistence.TypedQuery; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Expression; import javax.persistence.criteria.Root; import org.hibernate.jpa.test.BaseEntityManagerFunctionalTestCase; import org.hibernate.testing.TestForIssue; import org.junit.Test; import static org.junit.Assert.assertEquals; /** * Mote that these are simply performing syntax checking (can the criteria query * be properly compiled and executed) * * @author Steve Ebersole */ public class EnumIsMemberTest extends BaseEntityManagerFunctionalTestCase { @Override protected Class<?>[] getAnnotatedClasses() { return new Class[] {User.class}; } @Test @TestForIssue(jiraKey = "HHH-9605") public void testQueryEnumCollection() { EntityManager em = getOrCreateEntityManager(); em.getTransaction().begin(); User user = new User(); user.setId( 1l ); user.getRoles().add( User.Role.Admin ); em.persist( user ); em.getTransaction().commit(); em.getTransaction().begin(); CriteriaBuilder builder = em.getCriteriaBuilder(); CriteriaQuery<User> query = builder.createQuery( User.class ); Root<User> root = query.from( User.class ); Expression<Set<User.Role>> roles = root.get( User_.roles ); // Using the correct collection of enums and an enum parameter query.where( builder.isMember( User.Role.Admin, roles ) ); TypedQuery<User> typedQuery = em.createQuery( query ); List<User> users = typedQuery.getResultList(); assertEquals( 1, users.size() ); em.getTransaction().commit(); em.getTransaction().begin(); // delete em.remove( user ); em.getTransaction().commit(); } }