diff --git a/src/main/java/io/ebeaninternal/server/query/SqlTreeBuilder.java b/src/main/java/io/ebeaninternal/server/query/SqlTreeBuilder.java index bf8201a84..8fa67bd2c 100644 --- a/src/main/java/io/ebeaninternal/server/query/SqlTreeBuilder.java +++ b/src/main/java/io/ebeaninternal/server/query/SqlTreeBuilder.java @@ -419,15 +419,11 @@ public final class SqlTreeBuilder { } else { logger.error("property [" + propName + "] not found on " + desc + " for query - excluding it."); } - - } else if (p.isEmbedded()) { - // add the embedded bean (and effectively - // all its properties) + } else if (p.isEmbedded() || (p instanceof STreePropertyAssoc && !queryProps.isIncludedBeanJoin(p.getName()))) { + // add the embedded bean or the *ToOne assoc bean. We skip the check that the *ToOne propName maps to Id property ... selectProps.add(p); - } else { - String m = "property [" + p.getFullBeanName() + "] expected to be an embedded bean for query - excluding it."; - logger.error(m); + logger.error("property [" + p.getFullBeanName() + "] expected to be an embedded or *ToOne bean for query - excluding it."); } } diff --git a/src/test/java/org/tests/query/other/TestQuerySingleAttribute.java b/src/test/java/org/tests/query/other/TestQuerySingleAttribute.java index b985a2a0a..4b5c9ed3c 100644 --- a/src/test/java/org/tests/query/other/TestQuerySingleAttribute.java +++ b/src/test/java/org/tests/query/other/TestQuerySingleAttribute.java @@ -359,6 +359,21 @@ public class TestQuerySingleAttribute extends BaseTestCase { assertThat(sqlOf(query)).contains("select distinct t0.customer_id from contact t0 order by t0.customer_id desc"); } + @Test + public void distinctWithOrderByPkWithId() { + + ResetBasicData.reset(); + + Query query = Ebean.find(Contact.class) + .setDistinct(true) + .select("customer.id") + .orderBy().desc("customer.id"); + + query.findSingleAttributeList(); + + assertThat(sqlOf(query)).contains("select distinct t0.customer_id from contact t0 order by t0.customer_id desc"); + } + @Test public void distinctWithCascadedFetchOrderByPk() {