diff --git a/ebean-api/src/main/java/io/ebean/Query.java b/ebean-api/src/main/java/io/ebean/Query.java index 016e9f17c..449b023c5 100644 --- a/ebean-api/src/main/java/io/ebean/Query.java +++ b/ebean-api/src/main/java/io/ebean/Query.java @@ -510,14 +510,6 @@ public interface Query extends CancelableQuery, QueryBuilder, T> { */ QueryType getQueryType(); - /** - * Controls, if paginated queries should always append an 'order by id' statement at the end to - * guarantee a deterministic sort result. This may affect performance. - * If this is not enabled, and an orderBy is set on the query, it's up to the programmer that - * this query provides a deterministic result. - */ - Query orderById(boolean orderById); - /** * Set the profile location of this query. This is used to relate query execution metrics * back to a location like a specific line of code. diff --git a/ebean-api/src/main/java/io/ebean/QueryBuilder.java b/ebean-api/src/main/java/io/ebean/QueryBuilder.java index d8471ae6f..1cc1d2d73 100644 --- a/ebean-api/src/main/java/io/ebean/QueryBuilder.java +++ b/ebean-api/src/main/java/io/ebean/QueryBuilder.java @@ -466,6 +466,14 @@ public interface QueryBuilder extends QueryBuilderProjection { */ SELF setOrderBy(OrderBy orderBy); + /** + * Controls, if paginated queries should always append an 'order by id' statement at the end to + * guarantee a deterministic sort result. This may affect performance. + * If this is not enabled, and an orderBy is set on the query, it's up to the programmer that + * this query provides a deterministic result. + */ + SELF orderById(boolean orderById); + /** * Execute the query with the given lock type and WAIT. *

diff --git a/ebean-querybean/src/main/java/io/ebean/typequery/TQRootBean.java b/ebean-querybean/src/main/java/io/ebean/typequery/TQRootBean.java index 9d95468dc..f66796f37 100644 --- a/ebean-querybean/src/main/java/io/ebean/typequery/TQRootBean.java +++ b/ebean-querybean/src/main/java/io/ebean/typequery/TQRootBean.java @@ -582,6 +582,12 @@ public abstract class TQRootBean implements QueryBean { return root; } + @Override + public R orderById(boolean orderById) { + query.orderById(orderById); + return root; + } + @Override @Deprecated(since = "13.19", forRemoval = true) public final R order(String orderByClause) { diff --git a/ebean-querybean/src/test/java/org/querytest/QOrderTest.java b/ebean-querybean/src/test/java/org/querytest/QOrderTest.java index 9fd331291..1eec44f2a 100644 --- a/ebean-querybean/src/test/java/org/querytest/QOrderTest.java +++ b/ebean-querybean/src/test/java/org/querytest/QOrderTest.java @@ -79,6 +79,28 @@ class QOrderTest { DB.delete(customer); } + @Test + void orderById() { + Query query = new QOrder() + .select(QOrder.Alias.status) + .orderById(true).query(); + + query.findList(); + + String sql = query.getGeneratedSql(); + assertThat(sql).contains("select /* QOrderTest.orderById:88 */ t0.id, t0.status from o_order t0 order by t0.id"); + + Query query2 = new QOrder() + .select(QOrder.Alias.status) + .orderById(true).orderBy().status.asc() + .query(); + + query2.findList(); + + String sql2 = query2.getGeneratedSql(); + assertThat(sql2).contains("select /* QOrderTest.orderById:98 */ t0.id, t0.status from o_order t0 order by t0.status, t0.id"); + } + @Test void hint() { LoggedSql.start();