This is an automated email from the ASF dual-hosted git repository. borinquenkid pushed a commit to branch merge-hibernate6 in repository https://gitbox.apache.org/repos/asf/grails-core.git
commit 4cd35af25c587c9c85e5b94b233cebf24f94a1a6 Author: Walter Duque de Estrada <[email protected]> AuthorDate: Thu Sep 4 22:06:24 2025 -0500 PagedResultList --- .../src/main/groovy/grails/orm/HibernateCriteriaBuilder.java | 4 +++- .../groovy/org/grails/orm/hibernate/query/HibernateQuery.java | 11 ++++++++--- .../grails/orm/hibernate/query/HibernateQueryExecutor.java | 8 ++++---- .../src/main/groovy/grails/gorm/PagedResultList.java | 3 +++ 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/grails-data-hibernate6/core/src/main/groovy/grails/orm/HibernateCriteriaBuilder.java b/grails-data-hibernate6/core/src/main/groovy/grails/orm/HibernateCriteriaBuilder.java index 9ade10998a..e57ebb92da 100644 --- a/grails-data-hibernate6/core/src/main/groovy/grails/orm/HibernateCriteriaBuilder.java +++ b/grails-data-hibernate6/core/src/main/groovy/grails/orm/HibernateCriteriaBuilder.java @@ -17,6 +17,8 @@ package grails.orm; import grails.gorm.DetachedCriteria; import grails.gorm.MultiTenant; +import grails.gorm.PagedResultList; + import groovy.lang.Closure; import groovy.lang.DelegatesTo; import groovy.lang.GroovyObjectSupport; @@ -1282,7 +1284,7 @@ public class HibernateCriteriaBuilder extends GroovyObjectSupport implements Bui } hibernateQuery.order(order); } - result = hibernateQuery.list(); + result = new PagedResultList<>(hibernateQuery); } else { result = hibernateQuery.list(); diff --git a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/query/HibernateQuery.java b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/query/HibernateQuery.java index b0090b1bb9..db0f530fea 100644 --- a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/query/HibernateQuery.java +++ b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/query/HibernateQuery.java @@ -387,7 +387,12 @@ public class HibernateQuery extends Query { @Override public Query order(Order order) { - detachedCriteria.order(order); + //TODO HACK + if (order == null) { + detachedCriteria.getOrders().clear(); + } else { + detachedCriteria.order(order); + } return this; } @@ -646,10 +651,10 @@ public class HibernateQuery extends Query { final GrailsHibernateTemplate hibernateTemplate = (GrailsHibernateTemplate) hibernateSession.getNativeInterface(); return hibernateTemplate.execute((GrailsHibernateTemplate.HibernateCallback<Object>) session -> { HibernateQuery hibernateQuery = new HibernateQuery(hibernateSession, entity); - if (this.max != null) { + if (this.max != null && this.max > 0) { hibernateQuery.max(this.max); } - if (this.offset != null) { + if (this.offset != null && this.offset > 0) { hibernateQuery.offset(this.offset); } hibernateQuery.setDetachedCriteria(this.detachedCriteria.clone()); diff --git a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/query/HibernateQueryExecutor.java b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/query/HibernateQueryExecutor.java index 0a58a49c03..0fa0b59319 100644 --- a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/query/HibernateQueryExecutor.java +++ b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/query/HibernateQueryExecutor.java @@ -51,13 +51,13 @@ public record HibernateQueryExecutor( private Query configureQuery(Session session, JpaCriteriaQuery jpaCq) { var query = session.createQuery(jpaCq); - Optional.ofNullable(offset).ifPresent(query::setFirstResult); + Optional.ofNullable(offset).filter(v -> v > 0).ifPresent(query::setFirstResult); Optional.ofNullable(queryCache).ifPresent( qc -> query.setHint("org.hibernate.cacheable", qc)); - Optional.ofNullable(maxResults).ifPresent(query::setMaxResults); + Optional.ofNullable(maxResults).filter(v -> v > 0).ifPresent(query::setMaxResults); Optional.ofNullable(lockResult).ifPresent(query::setLockMode); Optional.ofNullable(resultTransformer).ifPresent(query::setResultTransformer); - Optional.ofNullable(fetchSize).ifPresent(query::setFetchSize); - Optional.ofNullable(timeout).ifPresent(query::setTimeout); + Optional.ofNullable(fetchSize).filter(v -> v > 0).ifPresent(query::setFetchSize); + Optional.ofNullable(timeout).filter(v -> v > 0).ifPresent(query::setTimeout); Optional.ofNullable(flushMode).map(mode -> mode.toJpaFlushMode()).ifPresent(query::setFlushMode); Optional.ofNullable(readOnly).ifPresent(query::setReadOnly); return query; diff --git a/grails-datamapping-core/src/main/groovy/grails/gorm/PagedResultList.java b/grails-datamapping-core/src/main/groovy/grails/gorm/PagedResultList.java index 9443ab5623..a8209e344f 100644 --- a/grails-datamapping-core/src/main/groovy/grails/gorm/PagedResultList.java +++ b/grails-datamapping-core/src/main/groovy/grails/gorm/PagedResultList.java @@ -107,6 +107,9 @@ public class PagedResultList<E> implements Serializable, List<E> { } else { Query newQuery = (Query)query.clone(); newQuery.offset(0); + //TODO HACK!! + newQuery.order(null); + newQuery.max(1); newQuery.projections().count(); Number result = (Number) newQuery.singleResult(); totalCount = result == null ? 0 : result.intValue();
