From 623366d7202470f6b8f5cceaf2c8b478c62e6a5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 16 Oct 2015 21:09:58 +0300 Subject: [PATCH] Fix query construction --- .../java/com/querydsl/jpa/JPACollectionAnyVisitor.java | 2 +- .../src/test/java/com/querydsl/jpa/AbstractJPATest.java | 5 +++++ .../com/querydsl/jpa/JPACollectionAnyVisitorTest.java | 9 +++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPACollectionAnyVisitor.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPACollectionAnyVisitor.java index 963a97add..61b1e4e80 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPACollectionAnyVisitor.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPACollectionAnyVisitor.java @@ -42,7 +42,7 @@ class JPACollectionAnyVisitor extends CollectionAnyVisitor { Path child = c.paths.get(i).getMetadata().getParent(); EntityPath replacement = (EntityPath) c.replacements.get(i); if (c.paths.get(i).getType().isAnnotationPresent(Entity.class)) { - query.from(Expressions.as( + query.addJoin(i == 0 ? JoinType.DEFAULT : JoinType.INNERJOIN, Expressions.as( Expressions.listPath((Class) c.paths.get(i).getType(), SimplePath.class, child.getMetadata()), replacement)); } else { diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java index 7870efb46..be7055f19 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java @@ -284,6 +284,11 @@ public abstract class AbstractJPATest { assertEquals(1, query().from(cat).where(cat.kittens.any().name.eq("Ruth123")).fetchCount()); } + @Test + public void Any_Any() { + assertEquals(1, query().from(cat).where(cat.kittens.any().kittens.any().name.eq("Ruth123")).fetchCount()); + } + @SuppressWarnings("unchecked") @Test public void ArrayProjection() { diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPACollectionAnyVisitorTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPACollectionAnyVisitorTest.java index 0b5d4ee04..19d813268 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPACollectionAnyVisitorTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPACollectionAnyVisitorTest.java @@ -49,6 +49,15 @@ public class JPACollectionAnyVisitorTest { "where cat_kittens_0.name = ?1)", serialize(predicate)); } + @Test + public void Simple_BooleanOperation_LongPath() { + Predicate predicate = cat.kittens.any().kittens.any().name.eq("Ruth123"); + assertEquals("exists (select 1\n" + + "from cat.kittens as cat_kittens_0\n" + + " inner join cat_kittens_0.kittens as cat_kittens_0_kittens_1\n" + + "where cat_kittens_0_kittens_1.name = ?1)", serialize(predicate)); + } + @Test public void Simple_BooleanOperation_ElementCollection() { QEmployee employee = QEmployee.employee;