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 59ac78a6bcd910c0c24b80894b0d5516c2b5a350
Author: Walter Duque de Estrada <[email protected]>
AuthorDate: Sat Feb 21 10:06:38 2026 -0600

    small refractions on JpaCriteriaQueryCreator
---
 .../hibernate/query/JpaCriteriaQueryCreator.java   | 45 ++++++++--------------
 1 file changed, 17 insertions(+), 28 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 6b5d4a266b..abc24a68b3 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
@@ -48,12 +48,8 @@ public class JpaCriteriaQueryCreator {
         Class<?> javaClass = entity.getJavaClass();
         Root<?> root = cq.from(javaClass);
         var tablesByName = new JpaFromProvider(detachedCriteria,cq,root);
-
-
         assignProjections(projectionList, cq, tablesByName);
-
-        List<Query.GroupPropertyProjection> groupProjections = 
collectGroupProjections();
-        assignGroupBy(groupProjections, cq, tablesByName);
+        assignGroupBy(cq, tablesByName);
 
         assignOrderBy(cq, tablesByName);
         assignCriteria(cq, root,tablesByName,entity);
@@ -78,39 +74,31 @@ public class JpaCriteriaQueryCreator {
         return cq;
     }
 
+    @SuppressWarnings("unchecked")
     private <T> void assignProjections(List<Query.Projection> projections, 
CriteriaQuery<T> cq, JpaFromProvider tablesByName) {
         var projectionExpressions = projections
                 .stream()
                 .map(projectionToJpaExpression(tablesByName))
                 .filter(Objects::nonNull)
                 .toList();
-        if (projectionExpressions.size() == 1) {
-            JpaExpression<?> jpaExpression = projectionExpressions.get(0);
-            cq.select((Selection<? extends T>) jpaExpression);
-        } else if (projectionExpressions.size() > 1){
-            var selectionArray = projectionExpressions.toArray(new 
Selection<?>[0]);
-            CriteriaQuery<Tuple> tupleCriteriaQuery = (CriteriaQuery<Tuple>) 
cq;
-            tupleCriteriaQuery.select(criteriaBuilder.tuple(selectionArray));
-        } else {
-            Path<?> root = tablesByName.getFullyQualifiedPath("root");
-            cq.select((Selection<? extends T>) root);
-        }
+            if (!projectionExpressions.isEmpty()){
+                var tupleCriteriaQuery = (CriteriaQuery<Tuple>) cq;
+                
tupleCriteriaQuery.select(criteriaBuilder.tuple(projectionExpressions.toArray(new
 Selection<?>[0])));
+            } else {
+                cq.select((Selection<? extends T>) 
tablesByName.getFullyQualifiedPath("root"));
+            }
     }
 
-    private void assignGroupBy(List<Query.GroupPropertyProjection> 
groupProjections, CriteriaQuery<?> cq, JpaFromProvider tablesByName) {
-        if (!groupProjections.isEmpty()) {
-            var groupByPaths = groupProjections
-                    .stream()
-                    .map(groupPropertyProjection -> {
-                        String propertyName = 
groupPropertyProjection.getPropertyName();
-                        return 
tablesByName.getFullyQualifiedPath(propertyName);
-                    })
-                    .filter(Objects::nonNull)
-                    .toArray(Path<?>[]::new);
-            cq.groupBy(groupByPaths);
-        }
+    private void assignGroupBy( CriteriaQuery<?> cq, JpaFromProvider 
tablesByName) {
+        var groupByPaths = collectGroupProjections()
+                .stream()
+                .map(groupPropertyProjection -> 
tablesByName.getFullyQualifiedPath(groupPropertyProjection.getPropertyName()))
+                .filter(Objects::nonNull)
+                .toArray(Path<?>[]::new);
+        cq.groupBy(groupByPaths);
     }
 
+    @SuppressWarnings("unchecked")
     private void assignOrderBy(CriteriaQuery<?> cq, JpaFromProvider 
tablesByName) {
         List<Query.Order> orders = detachedCriteria.getOrders();
         if (!orders.isEmpty()) {
@@ -140,6 +128,7 @@ public class JpaCriteriaQueryCreator {
         }
     }
 
+    @SuppressWarnings("unchecked")
     private Function<Query.Projection, JpaExpression<?>> 
projectionToJpaExpression(
             JpaFromProvider tablesByName) {
         return projection -> {

Reply via email to