mirror of
https://github.com/ebean-orm/ebean.git
synced 2026-10-24 08:25:50 +00:00
Merge pull request #797 from backslash47/master
Add check for distinct query when adding id attribute to order clause in paging query
This commit is contained in:
@@ -300,9 +300,10 @@ public class CQueryEngine {
|
||||
|
||||
|
||||
SpiQuery<T> 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);
|
||||
}
|
||||
|
||||
|
||||
@@ -80,5 +80,32 @@ public class TestQueryDistinct extends BaseTestCase {
|
||||
Assert.assertNull(customer.getAnniversary());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPagingQuery() {
|
||||
|
||||
ResetBasicData.reset();
|
||||
|
||||
Query<Customer> query = Ebean.find(Customer.class)
|
||||
.setMaxRows(10)
|
||||
.setDistinct(true)
|
||||
.select("name");
|
||||
|
||||
List<Customer> 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());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user