From d610e53a806cb9c7d7367fe304e503bdd96bc4ab Mon Sep 17 00:00:00 2001 From: Oliver Breidenbach Date: Mon, 20 Apr 2015 15:06:48 +0200 Subject: [PATCH] HHH-9375 - Testcase: EntityGraph and isMember functions generates illegal sql --- .../jpa/test/graphs/EntityGraphTest.java | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/hibernate-entitymanager/src/test/java/org/hibernate/jpa/test/graphs/EntityGraphTest.java b/hibernate-entitymanager/src/test/java/org/hibernate/jpa/test/graphs/EntityGraphTest.java index d0eb5d67b9..d9be82009f 100644 --- a/hibernate-entitymanager/src/test/java/org/hibernate/jpa/test/graphs/EntityGraphTest.java +++ b/hibernate-entitymanager/src/test/java/org/hibernate/jpa/test/graphs/EntityGraphTest.java @@ -20,6 +20,11 @@ import javax.persistence.OneToMany; import javax.persistence.Subgraph; import javax.persistence.Table; +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.Hibernate; import org.hibernate.jpa.test.BaseEntityManagerFunctionalTestCase; @@ -248,6 +253,50 @@ public void attributeNodeInheritanceTest() { em.close(); } + @Test + @TestForIssue(jiraKey = "HHH-9735") + public void loadIsMemeberQueriedCollection() { + + EntityManager em = getOrCreateEntityManager(); + em.getTransaction().begin(); + + Bar bar = new Bar(); + em.persist( bar ); + + Foo foo = new Foo(); + foo.bar = bar; + bar.foos.add(foo); + em.persist( foo ); + + em.getTransaction().commit(); + em.clear(); + + em.getTransaction().begin(); + foo = em.find(Foo.class, foo.id); + + CriteriaBuilder cb = em.getCriteriaBuilder(); + CriteriaQuery cq = cb.createQuery(Bar.class); + Root from = cq.from(Bar.class); + + Expression> foos = from.get("foos"); + + cq.where(cb.isMember(foo, foos)); + + TypedQuery query = em.createQuery(cq); + + EntityGraph barGraph = em.createEntityGraph( Bar.class ); + barGraph.addAttributeNodes("foos"); + query.setHint("javax.persistence.loadgraph", barGraph); + + Bar result = query.getSingleResult(); + + assertTrue( Hibernate.isInitialized( result ) ); + assertTrue( Hibernate.isInitialized( result.foos ) ); + + em.getTransaction().commit(); + em.close(); + } + @Entity @Table(name = "foo") public static class Foo {