You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@grails.apache.org by bo...@apache.org on 2026/02/21 17:21:47 UTC
(grails-core) 12/22: Fix multiple projections by using Object[] and criteriaBuilder.array instead of Tuple
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 <wb...@mac.com>
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()