diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeBuilder.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeBuilder.java index 43e3a0215..5963b84cd 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeBuilder.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeBuilder.java @@ -299,10 +299,10 @@ public final class SqlTreeBuilder { return new SqlTreeNodeRoot(desc, props, myList, withId, includeJoin, lazyLoadMany, temporalMode, disableLazyLoad, sqlDistinct, baseTable); } else if (prop instanceof STreePropertyAssocMany) { - return new SqlTreeNodeManyRoot(prefix, (STreePropertyAssocMany) prop, props, myList, temporalMode, disableLazyLoad); + boolean withId = isNotSingleAttribute() && !subQuery; + return new SqlTreeNodeManyRoot(prefix, (STreePropertyAssocMany) prop, props, myList, withId, temporalMode, disableLazyLoad); } else { - // do not read Id on child beans (e.g. when used with fetch()) boolean withId = isNotSingleAttribute() && !subQuery; return new SqlTreeNodeBean(prefix, prop, props, myList, withId, temporalMode, disableLazyLoad); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeNodeManyRoot.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeNodeManyRoot.java index d920b57ef..c030e96bc 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeNodeManyRoot.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeNodeManyRoot.java @@ -13,8 +13,8 @@ final class SqlTreeNodeManyRoot extends SqlTreeNodeBean { private final STreePropertyAssocMany manyProp; SqlTreeNodeManyRoot(String prefix, STreePropertyAssocMany prop, SqlTreeProperties props, List myList, - SpiQuery.TemporalMode temporalMode, boolean disableLazyLoad) { - super(prefix, prop, props, myList, true, temporalMode, disableLazyLoad); + boolean withId, SpiQuery.TemporalMode temporalMode, boolean disableLazyLoad) { + super(prefix, prop, props, myList, withId, temporalMode, disableLazyLoad); this.manyProp = prop; } diff --git a/ebean-core/src/test/java/org/tests/query/TestSubQuery.java b/ebean-core/src/test/java/org/tests/query/TestSubQuery.java index e9744ad30..2da642523 100644 --- a/ebean-core/src/test/java/org/tests/query/TestSubQuery.java +++ b/ebean-core/src/test/java/org/tests/query/TestSubQuery.java @@ -114,12 +114,13 @@ public class TestSubQuery extends BaseTestCase { List productIds = new ArrayList<>(); productIds.add(3); - Query sq = DB.createQuery(OrderDetail.class).alias("a").fetch("order.shipments", "id").where() + Query sq = DB.createQuery(OrderDetail.class).fetch("order.shipments", "id").where() .isIn("product.id", productIds).query(); // execute the subQuery as copy (generatedSQL must be part of original query) Query debugSq = sq.copy(); debugSq.findSingleAttribute(); + assertThat(debugSq.getGeneratedSql()).contains("select t2.id from o_order_detail a join o_order t1 on t1.id = a.order_id left join or_order_ship t2"); Query query = DB.find(OrderShipment.class).select("shipTime").where().isIn("id", sq).query(); query.findSingleAttribute();