This is an automated email from the ASF dual-hosted git repository.

borinquenkid pushed a commit to branch 8.0.x-hibernate7-dev
in repository https://gitbox.apache.org/repos/asf/grails-core.git

commit 67b42acfbafc1e6e737ce8773a6320fe75c2ca06
Author: Walter Duque de Estrada <[email protected]>
AuthorDate: Wed Mar 4 10:28:57 2026 -0600

    clean up PredicateGenerator
---
 .../orm/hibernate/query/PredicateGenerator.java    | 24 ++++++++++------------
 .../JpaCriteriaQueryCreatorSpec.groovy             |  1 -
 2 files changed, 11 insertions(+), 14 deletions(-)

diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/PredicateGenerator.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/PredicateGenerator.java
index 2b19c9fd45..8488ef23d1 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/PredicateGenerator.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/PredicateGenerator.java
@@ -39,7 +39,6 @@ import org.grails.datastore.gorm.GormEntity;
 import org.grails.datastore.gorm.query.criteria.DetachedAssociationCriteria;
 import org.grails.datastore.mapping.core.exceptions.ConfigurationException;
 import org.grails.datastore.mapping.model.PersistentEntity;
-import org.grails.datastore.mapping.model.types.Association;
 import org.grails.datastore.mapping.query.Query;
 import org.grails.datastore.mapping.query.api.QueryableCriteria;
 import org.hibernate.query.criteria.HibernateCriteriaBuilder;
@@ -53,7 +52,13 @@ import org.slf4j.LoggerFactory;
 @SuppressWarnings({
   "PMD.DataflowAnomalyAnalysis",
   "PMD.AvoidLiteralsInIfCondition",
-  "PMD.AvoidDuplicateLiterals"
+  "PMD.AvoidDuplicateLiterals",
+  // GORM stores criterion values as Object; JPA expects types resolved at 
compile time.
+  // The unchecked casts here are deliberate — type safety is enforced at 
runtime by
+  // MappingContext, not at compile time. This is the inherent cost of 
bridging a
+  // runtime-typed DSL (GORM) to a compile-time-typed API (JPA Criteria).
+  "unchecked",
+  "rawtypes"
 })
 public class PredicateGenerator {
   private static final Logger log = 
LoggerFactory.getLogger(PredicateGenerator.class);
@@ -94,11 +99,11 @@ public class PredicateGenerator {
     } else if (criterion instanceof DetachedAssociationCriteria<?> c) {
       return handleAssociationCriteria(cb, criteriaQuery, root, 
fromsByProvider, entity, c);
     } else if (criterion instanceof HibernateAssociationQuery haq) {
-      return handleHibernateAssociationQuery(cb, criteriaQuery, root, 
fromsByProvider, entity, haq);
+      return handleHibernateAssociationQuery(cb, criteriaQuery, root, 
fromsByProvider, haq);
     } else if (criterion instanceof Query.PropertyCriterion pc) {
       return handlePropertyCriterion(cb, criteriaQuery, root, fromsByProvider, 
entity, pc);
     } else if (criterion instanceof Query.PropertyComparisonCriterion c) {
-      return handlePropertyComparisonCriterion(cb, fromsByProvider, root, c);
+      return handlePropertyComparisonCriterion(cb, fromsByProvider, c);
     } else if (criterion instanceof Query.PropertyNameCriterion c) {
       return handlePropertyNameCriterion(cb, fromsByProvider, c);
     } else if (criterion instanceof Query.Exists c) {
@@ -153,7 +158,6 @@ public class PredicateGenerator {
       CriteriaQuery<?> criteriaQuery,
       From<?, ?> root,
       JpaFromProvider fromsByProvider,
-      PersistentEntity entity,
       HibernateAssociationQuery haq) {
     var child = root.join(haq.associationPath, JoinType.LEFT);
     JpaFromProvider childFroms = (JpaFromProvider) fromsByProvider.clone();
@@ -265,10 +269,9 @@ public class PredicateGenerator {
       return getQueryableCriteriaValue(
           cb, criteriaQuery, fromsByProvider, entity, c, queryableCriteria);
     } else if (!c.getValues().isEmpty()) {
-      boolean areGormEntities = 
c.getValues().stream().allMatch(GormEntity.class::isInstance);
-      if (areGormEntities) {
+      if (c.getValues().iterator().next() instanceof GormEntity firstEntity) {
         List<GormEntity> gormEntities = new ArrayList<>(c.getValues());
-        Path id = criteriaQuery.from(gormEntities.get(0).getClass()).get("id");
+        Path id = criteriaQuery.from(firstEntity.getClass()).get("id");
         Collection newValues = 
gormEntities.stream().map(GormEntity::ident).toList();
         return cb.in(id, newValues);
       }
@@ -337,7 +340,6 @@ public class PredicateGenerator {
   private Predicate handlePropertyComparisonCriterion(
       HibernateCriteriaBuilder cb,
       JpaFromProvider fromsByProvider,
-      From<?, ?> root_,
       Query.PropertyComparisonCriterion c) {
     Path path = fromsByProvider.getFullyQualifiedPath(c.getProperty());
     Path otherPath = 
fromsByProvider.getFullyQualifiedPath(c.getOtherProperty());
@@ -434,7 +436,6 @@ public class PredicateGenerator {
         .orElse(null);
   }
 
-  @SuppressWarnings("rawtypes")
   private JpaInPredicate findInPredicate(
       HibernateCriteriaBuilder cb, Object projection, Path path, String 
subProperty) {
     return projection instanceof Query.PropertyProjection
@@ -448,7 +449,6 @@ public class PredicateGenerator {
         : "id";
   }
 
-  @SuppressWarnings("unchecked")
   private Query.Projection findPropertyOrIdProjection(QueryableCriteria 
queryableCriteria) {
     return (Query.Projection)
         queryableCriteria.getProjections().stream()
@@ -457,14 +457,12 @@ public class PredicateGenerator {
             .orElse(new Query.IdProjection());
   }
 
-  @SuppressWarnings("rawtypes")
   private QueryableCriteria getQueryableCriteriaFromInCriteria(Query.Criterion 
criterion) {
     return criterion instanceof Query.In
         ? ((Query.In) criterion).getSubquery()
         : ((Query.NotIn) criterion).getSubquery();
   }
 
-  @SuppressWarnings("rawtypes")
   private Class getJavaTypeOfInClause(SqmInListPredicate predicate) {
     return Optional.ofNullable(predicate.getTestExpression().getExpressible())
         .map(expressible -> 
expressible.getExpressibleJavaType().getJavaTypeClass())
diff --git 
a/grails-data-hibernate7/core/src/test/groovy/grails/gorm/specs/hibernatequery/JpaCriteriaQueryCreatorSpec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/grails/gorm/specs/hibernatequery/JpaCriteriaQueryCreatorSpec.groovy
index 8ad54c2c23..968e78f914 100644
--- 
a/grails-data-hibernate7/core/src/test/groovy/grails/gorm/specs/hibernatequery/JpaCriteriaQueryCreatorSpec.groovy
+++ 
b/grails-data-hibernate7/core/src/test/groovy/grails/gorm/specs/hibernatequery/JpaCriteriaQueryCreatorSpec.groovy
@@ -5,7 +5,6 @@ import grails.gorm.specs.HibernateGormDatastoreSpec
 import org.apache.grails.data.testing.tck.domains.Person
 import org.grails.datastore.mapping.query.Query
 import org.grails.orm.hibernate.query.JpaCriteriaQueryCreator
-import org.grails.orm.hibernate.query.PredicateGenerator
 import org.hibernate.query.criteria.HibernateCriteriaBuilder
 import org.hibernate.query.criteria.JpaCriteriaQuery
 

Reply via email to