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:56 UTC

(grails-core) 21/22: small refractions on JpaCriteriaQueryCreator

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 <wb...@mac.com>
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 -> {