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 ad9902dc818a6eb654124e89c3d4c1d4126606f2
Author: Walter Duque de Estrada <[email protected]>
AuthorDate: Fri Mar 20 07:25:17 2026 -0500

    hibernate 7:
    
     JpaCriteriaQueryCreator cleaned up and spec fixed
---
 .../hibernate/query/JpaCriteriaQueryCreator.java   |  4 +-
 .../gorm/specs/HibernateGormDatastoreSpec.groovy   |  6 ++
 .../JpaCriteriaQueryCreatorSpec.groovy             | 65 +++++++++++++++++++---
 3 files changed, 65 insertions(+), 10 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 2d89b22f70..05abe24f3b 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
@@ -71,7 +71,7 @@ public class JpaCriteriaQueryCreator {
         var cq = createCriteriaQuery(projectionList);
         Class<?> javaClass = entity.getJavaClass();
         Root<?> root = cq.from(javaClass);
-        var tablesByName = new JpaFromProvider(detachedCriteria, 
projectionList, cq, root);
+        var tablesByName = new JpaFromProvider(detachedCriteria, 
projectionList, root);
         assignProjections(projectionList, cq, tablesByName);
         assignGroupBy(cq, tablesByName);
 
@@ -85,7 +85,7 @@ public class JpaCriteriaQueryCreator {
         var projectionList = collectProjections();
         Class<?> javaClass = entity.getJavaClass();
         Root<?> root = subquery.from(javaClass);
-        var tablesByName = new JpaFromProvider(detachedCriteria, 
projectionList, subquery, root);
+        var tablesByName = new JpaFromProvider(detachedCriteria, 
projectionList, root);
 
         var aliasedProjections = new 
java.util.concurrent.atomic.AtomicInteger(0);
         var projectionExpressions = projectionList.stream()
diff --git 
a/grails-data-hibernate7/core/src/test/groovy/grails/gorm/specs/HibernateGormDatastoreSpec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/grails/gorm/specs/HibernateGormDatastoreSpec.groovy
index 4b9323e4bf..6387405c9d 100644
--- 
a/grails-data-hibernate7/core/src/test/groovy/grails/gorm/specs/HibernateGormDatastoreSpec.groovy
+++ 
b/grails-data-hibernate7/core/src/test/groovy/grails/gorm/specs/HibernateGormDatastoreSpec.groovy
@@ -19,9 +19,11 @@
 
 package grails.gorm.specs
 
+import grails.orm.HibernateCriteriaBuilder
 import org.apache.grails.data.hibernate7.core.GrailsDataHibernate7TckManager
 import org.apache.grails.data.testing.tck.base.GrailsDataTckSpec
 import org.grails.datastore.mapping.model.PersistentEntity
+import org.grails.datastore.mapping.query.api.BuildableCriteria
 import org.grails.orm.hibernate.HibernateSession
 import org.grails.orm.hibernate.HibernateDatastore
 import org.grails.orm.hibernate.cfg.domainbinding.binder.GrailsDomainBinder
@@ -154,6 +156,10 @@ class HibernateGormDatastoreSpec extends 
GrailsDataTckSpec<GrailsDataHibernate7T
         manager.hibernateDatastore
     }
 
+    protected org.hibernate.query.criteria.HibernateCriteriaBuilder 
getCriteriaBuilder() {
+        return getSessionFactory().getCriteriaBuilder();
+    }
+
 
     protected HibernateSession getSession() {
         datastore.connect() as HibernateSession
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 4605e8d6eb..660f300d1a 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
@@ -1,29 +1,30 @@
 package grails.gorm.specs.hibernatequery
 
+import org.hibernate.query.criteria.HibernateCriteriaBuilder
+import spock.lang.Shared
+
 import grails.gorm.DetachedCriteria
 import grails.gorm.specs.HibernateGormDatastoreSpec
-import org.grails.datastore.mapping.model.PersistentEntity
 import org.grails.datastore.mapping.query.Query
-import grails.orm.HibernateCriteriaBuilder
 import org.hibernate.query.criteria.JpaCriteriaQuery
 import org.grails.orm.hibernate.query.JpaCriteriaQueryCreator
 import org.springframework.core.convert.support.DefaultConversionService
-import spock.lang.Shared
 import grails.gorm.annotation.Entity
 import org.grails.datastore.gorm.GormEntity
 
 class JpaCriteriaQueryCreatorSpec extends HibernateGormDatastoreSpec {
 
+
     void setupSpec() {
         manager.addAllDomainClasses([JpaCriteriaQueryCreatorSpecPerson, 
JpaCriteriaQueryCreatorSpecPet])
     }
 
     def "test createQuery"() {
         given:
-        HibernateCriteriaBuilder criteriaBuilder = 
sessionFactory.getCriteriaBuilder()
+       
         var entity = 
manager.hibernateDatastore.getMappingContext().getPersistentEntity(JpaCriteriaQueryCreatorSpecPerson.name)
         var detachedCriteria = new 
DetachedCriteria(JpaCriteriaQueryCreatorSpecPerson)
-        var creator = new JpaCriteriaQueryCreator(criteriaBuilder, entity, 
detachedCriteria, new DefaultConversionService())
+        var creator = new JpaCriteriaQueryCreator(new Query.ProjectionList(), 
criteriaBuilder, entity, detachedCriteria, new DefaultConversionService())
 
         when:
         JpaCriteriaQuery<?> query = creator.createQuery()
@@ -34,7 +35,7 @@ class JpaCriteriaQueryCreatorSpec extends 
HibernateGormDatastoreSpec {
 
     def "test createQuery with projections"() {
         given:
-        HibernateCriteriaBuilder criteriaBuilder = 
sessionFactory.getCriteriaBuilder()
+      
         var entity = 
manager.hibernateDatastore.getMappingContext().getPersistentEntity(JpaCriteriaQueryCreatorSpecPerson.name)
         var detachedCriteria = new 
DetachedCriteria(JpaCriteriaQueryCreatorSpecPerson)
         
@@ -53,7 +54,7 @@ class JpaCriteriaQueryCreatorSpec extends 
HibernateGormDatastoreSpec {
 
     def "test createQuery with distinct"() {
         given:
-        HibernateCriteriaBuilder criteriaBuilder = 
sessionFactory.getCriteriaBuilder()
+      
         var entity = 
manager.hibernateDatastore.getMappingContext().getPersistentEntity(JpaCriteriaQueryCreatorSpecPerson.name)
         var detachedCriteria = new 
DetachedCriteria(JpaCriteriaQueryCreatorSpecPerson)
         
@@ -74,7 +75,7 @@ class JpaCriteriaQueryCreatorSpec extends 
HibernateGormDatastoreSpec {
 
     def "test createQuery with association projection triggers auto-join"() {
         given:
-        HibernateCriteriaBuilder criteriaBuilder = 
sessionFactory.getCriteriaBuilder()
+      
         var entity = 
manager.hibernateDatastore.getMappingContext().getPersistentEntity(JpaCriteriaQueryCreatorSpecPet.name)
         var detachedCriteria = new 
DetachedCriteria(JpaCriteriaQueryCreatorSpecPet)
         
@@ -90,6 +91,54 @@ class JpaCriteriaQueryCreatorSpec extends 
HibernateGormDatastoreSpec {
         noExceptionThrown()
         query != null
     }
+
+    def "test createQuery with order by"() {
+        given:
+        var entity = getPersistentEntity(JpaCriteriaQueryCreatorSpecPerson)
+        var detachedCriteria = new 
DetachedCriteria(JpaCriteriaQueryCreatorSpecPerson)
+        detachedCriteria.order(Query.Order.asc("firstName"))
+        var creator = new JpaCriteriaQueryCreator(new Query.ProjectionList(), 
criteriaBuilder, entity, detachedCriteria, new DefaultConversionService())
+
+        when:
+        JpaCriteriaQuery<?> query = creator.createQuery()
+
+        then:
+        query != null
+    }
+
+    def "test createQuery with group by"() {
+        given:
+        var entity = getPersistentEntity(JpaCriteriaQueryCreatorSpecPerson)
+        var detachedCriteria = new 
DetachedCriteria(JpaCriteriaQueryCreatorSpecPerson)
+        var projections = new Query.ProjectionList()
+        projections.groupProperty("lastName")
+        var creator = new JpaCriteriaQueryCreator(projections, 
criteriaBuilder, entity, detachedCriteria, new DefaultConversionService())
+
+        when:
+        JpaCriteriaQuery<?> query = creator.createQuery()
+
+        then:
+        query != null
+    }
+
+    def "test populateSubquery"() {
+        given:
+        var entity = getPersistentEntity(JpaCriteriaQueryCreatorSpecPerson)
+        var detachedCriteria = new 
DetachedCriteria(JpaCriteriaQueryCreatorSpecPerson)
+        detachedCriteria.eq("firstName", "Bob")
+
+        var creator = new JpaCriteriaQueryCreator(new Query.ProjectionList(), 
criteriaBuilder, entity, detachedCriteria, new DefaultConversionService())
+
+        // Create a parent query to get a subquery from
+        var parentCq = 
criteriaBuilder.createQuery(JpaCriteriaQueryCreatorSpecPerson)
+        var subquery = parentCq.subquery(Long)
+
+        when:
+        creator.populateSubquery(subquery)
+
+        then:
+        noExceptionThrown()
+    }
 }
 
 @Entity

Reply via email to