This is an automated email from the ASF dual-hosted git repository. borinquenkid pushed a commit to branch 8.0.x-hibernate7 in repository https://gitbox.apache.org/repos/asf/grails-core.git
commit e43fc37a87469a0870139c9285040ad7f7abfab3 Author: Walter Duque de Estrada <[email protected]> AuthorDate: Fri Feb 20 12:38:02 2026 -0600 Fix multiple projections by using Object[] and criteriaBuilder.array instead of Tuple --- .../grails/orm/hibernate/query/JpaCriteriaQueryCreator.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaCriteriaQueryCreator.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaCriteriaQueryCreator.java index 6162991cf4..25fbc9db0c 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaCriteriaQueryCreator.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaCriteriaQueryCreator.java @@ -1,6 +1,7 @@ package org.grails.orm.hibernate.query; import grails.gorm.DetachedCriteria; + import jakarta.persistence.criteria.CriteriaQuery; import jakarta.persistence.criteria.Expression; import jakarta.persistence.criteria.From; @@ -51,7 +52,7 @@ public class JpaCriteriaQueryCreator { assignProjections(projectionList, cq, tablesByName); List<Query.GroupPropertyProjection> groupProjections = collectGroupProjections(); - assignGroupBy(groupProjections, root, cq, tablesByName); + assignGroupBy(groupProjections, cq, tablesByName); assignOrderBy(cq, tablesByName); assignCriteria(cq, root,tablesByName,entity); @@ -72,9 +73,7 @@ public class JpaCriteriaQueryCreator { projections.stream() .filter( it -> it instanceof Query.DistinctProjection || it instanceof Query.DistinctPropertyProjection) .findFirst() - .ifPresent(projection -> { - cq.distinct(true); - }); + .ifPresent(projection -> cq.distinct(true)); return cq; } @@ -87,13 +86,14 @@ public class JpaCriteriaQueryCreator { if (projectionExpressions.size() == 1) { cq.select((Selection<? extends T>) projectionExpressions.get(0)); } else if (projectionExpressions.size() > 1){ - cq.multiselect(projectionExpressions); + var selectionArray = projectionExpressions.toArray(new Selection<?>[0]); + ((JpaCriteriaQuery<Object[]>)cq).select(criteriaBuilder.array(selectionArray)); } else { cq.select((Selection<? extends T>) tablesByName.getFullyQualifiedPath("root")); } } - private void assignGroupBy(List<Query.GroupPropertyProjection> groupProjections, From<?, ?> root, CriteriaQuery<?> cq, JpaFromProvider tablesByName) { + private void assignGroupBy(List<Query.GroupPropertyProjection> groupProjections, CriteriaQuery<?> cq, JpaFromProvider tablesByName) { if (!groupProjections.isEmpty()) { List<Expression<?>> groupByPaths = (List) groupProjections .stream()
