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

borinquenkid pushed a commit to branch merge-hibernate6
in repository https://gitbox.apache.org/repos/asf/grails-core.git

commit 0ea31dc5aca9163d1e4081e3df04f17eca012995
Author: Walter Duque de Estrada <[email protected]>
AuthorDate: Sun Aug 24 13:47:05 2025 -0500

    more deduplication
---
 .../orm/hibernate/HibernateGormStaticApi.groovy    | 187 ++++++++++-----------
 .../orm/hibernate/query/HibernateHqlQuery.java     |   9 +-
 .../hibernate/HibernateGormStaticApiSpec.groovy    |   6 +-
 3 files changed, 99 insertions(+), 103 deletions(-)

diff --git 
a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/HibernateGormStaticApi.groovy
 
b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/HibernateGormStaticApi.groovy
index 93936042f5..aa18412cd9 100644
--- 
a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/HibernateGormStaticApi.groovy
+++ 
b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/HibernateGormStaticApi.groovy
@@ -45,15 +45,12 @@ import org.hibernate.NonUniqueResultException
 import org.hibernate.Session
 import org.hibernate.SessionFactory
 import org.hibernate.jpa.QueryHints
-import org.hibernate.query.NativeQuery
 import org.hibernate.query.Query
 import org.hibernate.query.criteria.JpaPredicate
 import org.springframework.core.convert.ConversionService
 import org.springframework.orm.hibernate5.SessionHolder
 import org.springframework.transaction.PlatformTransactionManager
 import 
org.springframework.transaction.support.TransactionSynchronizationManager
-
-import jakarta.persistence.FlushModeType
 import jakarta.persistence.criteria.CriteriaBuilder
 import jakarta.persistence.criteria.CriteriaQuery
 
@@ -234,55 +231,18 @@ class HibernateGormStaticApi<D> extends GormStaticApi<D> {
     }
 
     @Override
-    D find(CharSequence query, Map queryNamedArgs, Map args) {
-        queryNamedArgs = new LinkedHashMap(queryNamedArgs)
-        args = new LinkedHashMap(args)
-        if(query instanceof GString) {
-            query = buildNamedParameterQueryFromGString((GString) query, 
queryNamedArgs)
-        }
-
-        String queryString = query.toString()
-        query = normalizeMultiLineQueryString(queryString)
-
-        def template = hibernateTemplate
-        queryNamedArgs = new HashMap(queryNamedArgs)
-        return (D) template.execute { Session session ->
-            def hqlQuery = HibernateHqlQuery.createHqlQuery(session, datastore 
as HibernateDatastore, sessionFactory, persistentEntity, queryString, false)
-            template.applySettings(hqlQuery.getQuery());
-            hqlQuery.populateQuerySettings(queryNamedArgs)
-            hqlQuery.populateQuerySettings(args)
-            hqlQuery.populateQueryWithNamedArguments(queryNamedArgs)
-            hqlQuery.singleResult()
-        }
+    D find(CharSequence query, Map namedParams, Map args) {
+        doSingleInternal(query,namedParams,[],args)
     }
 
     @Override
-    D find(CharSequence query, Collection params, Map args) {
-        def result = numberedParameterQuery(query, args, params)
-        result ? result.first() : null
+    D find(CharSequence query, Collection positionalParams, Map args) {
+       doSingleInternal(query,[:],positionalParams,args)
     }
 
     @Override
-    List<D> findAll(CharSequence query, Map params, Map args) {
-
-        params = new LinkedHashMap(params)
-        args = new LinkedHashMap(args)
-        if(query instanceof GString) {
-            query = buildNamedParameterQueryFromGString((GString) query, 
params)
-        }
-
-        String queryString = query.toString()
-        queryString = normalizeMultiLineQueryString(queryString)
-
-        def template = hibernateTemplate
-        return (List<D>) template.execute { Session session ->
-            def hibernateHqlQuery = HibernateHqlQuery.createHqlQuery(session, 
datastore as HibernateDatastore, sessionFactory, persistentEntity,queryString, 
false)
-            template.applySettings(hibernateHqlQuery.getQuery())
-            hibernateHqlQuery.populateQuerySettings(params)
-            hibernateHqlQuery.populateQuerySettings(args)
-            hibernateHqlQuery.populateQueryWithNamedArguments(params)
-            hibernateHqlQuery.list()
-        }
+    List<D> findAll(CharSequence query, Map namedParams, Map args) {
+      doListInternal(query,namedParams,[],args)
     }
 
     @CompileDynamic // required for Hibernate 5.2 compatibility
@@ -345,14 +305,7 @@ class HibernateGormStaticApi<D> extends GormStaticApi<D> {
 
     @Override
     List executeQuery(CharSequence query) {
-        if(query instanceof GString) {
-            Map params = [:]
-            String hql = buildNamedParameterQueryFromGString((GString)query, 
params)
-            return executeQuery(hql, params, Collections.emptyMap())
-        }
-        else {
-            return super.executeQuery(query)
-        }
+        return doListInternal(query, [:], [], [:])
     }
 
     @Override
@@ -369,50 +322,22 @@ class HibernateGormStaticApi<D> extends GormStaticApi<D> {
 
     @Override
     D find(CharSequence query) {
-        if(query instanceof GString) {
-            Map params = [:]
-            String hql = buildNamedParameterQueryFromGString((GString)query, 
params)
-            return find(hql, params, Collections.emptyMap())
-        }
-        else {
-            return (D)super.find(query)
-        }
+       doSingleInternal(query,[:],[],[:])
     }
 
     @Override
     D find(CharSequence query, Map params) {
-        if(query instanceof GString) {
-            Map newParams = new LinkedHashMap(params)
-            String hql = buildNamedParameterQueryFromGString((GString)query, 
newParams)
-            return find(hql, newParams, newParams)
-        }
-        else {
-            return (D)super.find(query, params)
-        }
+        doSingleInternal(query, params, [], [:])
     }
 
     @Override
     List<D> findAll(CharSequence query, Map params) {
-        if(query instanceof GString) {
-            Map newParams = new LinkedHashMap(params)
-            String hql = buildNamedParameterQueryFromGString((GString)query, 
newParams)
-            return findAll(hql, newParams, newParams)
-        }
-        else {
-            return super.findAll(query, params)
-        }
+        doListInternal(query, params, [], [:])
     }
 
     @Override
     List executeQuery(CharSequence query, Map args) {
-        if(query instanceof GString) {
-            Map newParams = new LinkedHashMap(args)
-            String hql = buildNamedParameterQueryFromGString((GString)query, 
newParams)
-            return executeQuery(hql, newParams, newParams)
-        }
-        else {
-            return super.executeQuery(query, args)
-        }
+        return doListInternal(query, [:], [], args)
     }
 
 
@@ -451,26 +376,86 @@ class HibernateGormStaticApi<D> extends GormStaticApi<D> {
     }
 
     @Override
-    List executeQuery(CharSequence query, Map params, Map args) {
-        def template = hibernateTemplate
-        args = new HashMap(args)
-        params = new HashMap(params)
+    List executeQuery(CharSequence query, Map namedParams, Map args) {
+      return doListInternal(query, namedParams, [],  args)
+    }
 
-        if(query instanceof GString) {
-            query = buildNamedParameterQueryFromGString((GString) query, 
params)
+    @SuppressWarnings('GroovyAssignabilityCheck')
+    private List doListInternal(CharSequence queryString,
+                                Map namedParams,
+                                Collection positionalParams,
+                                Map args) {
+        def template = hibernateTemplate
+        if (queryString instanceof  GString) {
+            if (positionalParams) {
+                queryString = 
buildOrdinalParameterQueryFromGString((GString)queryString, positionalParams as 
List)
+            } else {
+                queryString = 
buildNamedParameterQueryFromGString((GString)queryString, namedParams)
+            }
         }
+        String hql = normalizeMultiLineQueryString(queryString?.toString())
+        Map argCopy = args != null ? new HashMap(args) : Collections.emptyMap()
 
         return (List<D>) template.execute { Session session ->
-//            Query q = (Query) 
session.createQuery(query.toString(),Object.class)
-            def hibernateHqlQuery = HibernateHqlQuery.createHqlQuery(session, 
datastore as HibernateDatastore, sessionFactory, persistentEntity, 
query.toString(), false)
+            def hibernateHqlQuery = HibernateHqlQuery.createHqlQuery(
+                    session, datastore as HibernateDatastore, sessionFactory, 
persistentEntity, hql, false)
             template.applySettings(hibernateHqlQuery.getQuery())
-            hibernateHqlQuery.populateQuerySettings(params)
-            hibernateHqlQuery.populateQuerySettings(args)
-            hibernateHqlQuery.populateQueryWithNamedArguments(params)
+
+            // apply query settings (max, offset, cache, etc.)
+            hibernateHqlQuery.populateQuerySettings(argCopy)
+
+            // apply parameters
+            if (namedParams) {
+                Map namedCopy = new HashMap(namedParams)
+                hibernateHqlQuery.populateQueryWithNamedArguments(namedCopy)
+            } else if (positionalParams) {
+                List positionalList = (positionalParams instanceof List) ? 
(List) positionalParams : new ArrayList(positionalParams)
+                
hibernateHqlQuery.populateQueryWithIndexedArguments(positionalList)
+            }
+
+            // execute
             hibernateHqlQuery.list()
         }
     }
 
+    @SuppressWarnings('GroovyAssignabilityCheck')
+    private D doSingleInternal(CharSequence queryString,
+                                Map namedParams,
+                                Collection positionalParams,
+                                Map args) {
+        def template = hibernateTemplate
+        if (queryString instanceof  GString) {
+            if (positionalParams) {
+                queryString = 
buildOrdinalParameterQueryFromGString((GString)queryString, positionalParams as 
List)
+            } else {
+                queryString = 
buildNamedParameterQueryFromGString((GString)queryString, namedParams)
+            }
+        }
+        String hql = normalizeMultiLineQueryString(queryString?.toString())
+        Map argCopy = args != null ? new HashMap(args) : Collections.emptyMap()
+
+        return (D) template.execute { Session session ->
+            def hibernateHqlQuery = HibernateHqlQuery.createHqlQuery(
+                    session, datastore as HibernateDatastore, sessionFactory, 
persistentEntity, hql, false)
+            template.applySettings(hibernateHqlQuery.getQuery())
+
+            // apply query settings (max, offset, cache, etc.)
+            hibernateHqlQuery.populateQuerySettings(argCopy)
+
+            // apply parameters
+            if (namedParams) {
+                Map namedCopy = new HashMap(namedParams)
+                hibernateHqlQuery.populateQueryWithNamedArguments(namedCopy)
+            } else if (positionalParams) {
+                List positionalList = (positionalParams instanceof List) ? 
(List) positionalParams : new ArrayList(positionalParams)
+                
hibernateHqlQuery.populateQueryWithIndexedArguments(positionalList)
+            }
+
+            // execute
+            hibernateHqlQuery.singleResult()
+        }
+    }
+
 
 
     private List<D> numberedParameterQuery(CharSequence query, Map args, 
params) {
@@ -492,13 +477,13 @@ class HibernateGormStaticApi<D> extends GormStaticApi<D> {
     }
 
     @Override
-    List executeQuery(CharSequence query, Collection params, Map args) {
-        numberedParameterQuery(query, args, params)
+    List executeQuery(CharSequence query, Collection positionalParams, Map 
args) {
+        return doListInternal(query,[:], positionalParams, args)
     }
 
     @Override
-    List<D> findAll(CharSequence query, Collection params, Map args) {
-        numberedParameterQuery(query, args, params)
+    List<D> findAll(CharSequence query, Collection positionalParams, Map args) 
{
+        doListInternal(query,[:], positionalParams, args)
     }
 
     @Override
diff --git 
a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/query/HibernateHqlQuery.java
 
b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/query/HibernateHqlQuery.java
index e0d9900aa6..7eaa6708ff 100644
--- 
a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/query/HibernateHqlQuery.java
+++ 
b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/query/HibernateHqlQuery.java
@@ -1,6 +1,8 @@
 package org.grails.orm.hibernate.query;
 
 import jakarta.persistence.FlushModeType;
+import org.apache.groovy.parser.antlr4.util.StringUtils;
+import org.codehaus.groovy.util.StringUtil;
 import org.grails.datastore.gorm.finders.DynamicFinder;
 import org.grails.datastore.mapping.core.Datastore;
 import org.grails.datastore.mapping.core.Session;
@@ -74,7 +76,12 @@ public class HibernateHqlQuery extends Query {
         // Normalize only for HQL (not for native SQL)
         String hqlToUse = isNative ? sqlString : 
normalizeNonAliasedSelect(sqlString);
         var clazz = getTarget(hqlToUse, persistentEntity.getJavaClass());
-        var q = isNative ? session.createNativeQuery(sqlString, clazz) : 
session.createQuery(hqlToUse, clazz);
+        org.hibernate.query.Query q = null;
+        if (StringUtils.isEmpty(hqlToUse)) {
+           session.createQuery("from " + clazz.getName(), clazz);
+        } else {
+            q = isNative ? session.createNativeQuery(hqlToUse, clazz) : 
session.createQuery(hqlToUse, clazz);
+        }
         var hibernateSession = new HibernateSession( dataStore, 
sessionFactory);
         HibernateHqlQuery hibernateHqlQuery = new 
HibernateHqlQuery(hibernateSession, null, q);
         hibernateHqlQuery.setFlushMode(session.getHibernateFlushMode());
diff --git 
a/grails-data-hibernate6/core/src/test/groovy/org/grails/orm/hibernate/HibernateGormStaticApiSpec.groovy
 
b/grails-data-hibernate6/core/src/test/groovy/org/grails/orm/hibernate/HibernateGormStaticApiSpec.groovy
index f647394a20..6e4a1630a0 100644
--- 
a/grails-data-hibernate6/core/src/test/groovy/org/grails/orm/hibernate/HibernateGormStaticApiSpec.groovy
+++ 
b/grails-data-hibernate6/core/src/test/groovy/org/grails/orm/hibernate/HibernateGormStaticApiSpec.groovy
@@ -226,7 +226,11 @@ class HibernateGormStaticApiSpec extends 
HibernateGormDatastoreSpec {
         new HibernateGormStaticApiEntity(name: "test").save(flush: true, 
failOnError: true)
 
         when:
-        def updated = HibernateGormStaticApiEntity.executeUpdate("update 
HibernateGormStaticApiEntity set name = 'updated' where name = 'test'")
+        def updated
+        HibernateGormStaticApiEntity.withNewTransaction { status ->
+            updated = HibernateGormStaticApiEntity.executeUpdate("update 
HibernateGormStaticApiEntity set name = 'updated' where name = 'test'")
+
+        }
         def instance = HibernateGormStaticApiEntity.first()
 
         then:

Reply via email to