diff --git a/src/main/java/com/avaje/ebeaninternal/server/query/CQueryEngine.java b/src/main/java/com/avaje/ebeaninternal/server/query/CQueryEngine.java index 425e488f8..0818ca8ca 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/query/CQueryEngine.java +++ b/src/main/java/com/avaje/ebeaninternal/server/query/CQueryEngine.java @@ -300,9 +300,10 @@ public class CQueryEngine { SpiQuery query = request.getQuery(); - if (query.getMaxRows() > 1 || query.getFirstRow() > 0) { + if (!query.isDistinct() && (query.getMaxRows() > 1 || query.getFirstRow() > 0)) { // deemed to be a be a paging query - check that the order by contains // the id property to ensure unique row ordering for predicable paging + // but only in case, this is not a distinct query request.getBeanDescriptor().appendOrderById(query); } diff --git a/src/test/java/com/avaje/tests/query/other/TestQueryDistinct.java b/src/test/java/com/avaje/tests/query/other/TestQueryDistinct.java index 7a7e6040f..a442c3677 100644 --- a/src/test/java/com/avaje/tests/query/other/TestQueryDistinct.java +++ b/src/test/java/com/avaje/tests/query/other/TestQueryDistinct.java @@ -80,5 +80,32 @@ public class TestQueryDistinct extends BaseTestCase { Assert.assertNull(customer.getAnniversary()); } } + + @Test + public void testPagingQuery() { + + ResetBasicData.reset(); + + Query query = Ebean.find(Customer.class) + .setMaxRows(10) + .setDistinct(true) + .select("name"); + + List customers = query.findList(); + + String generatedSql = query.getGeneratedSql(); + Assert.assertTrue(generatedSql.contains("select distinct t0.name c0 from o_customer t0 limit 10")); + + for (Customer customer : customers) { + + EntityBeanIntercept ebi = ((EntityBean)customer)._ebean_getIntercept(); + Assert.assertTrue(ebi.isDisableLazyLoad()); + Assert.assertNull(ebi.getPersistenceContext()); + + // lazy loading disabled + Assert.assertNull(customer.getId()); + Assert.assertNull(customer.getAnniversary()); + } + } }