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 3a81863f761e00a35ae050114f171525f6a9d751 Author: Walter Duque de Estrada <wbdu...@mac.com> AuthorDate: Mon Aug 18 18:29:05 2025 -0500 more to HibernateHqlQuery --- .../orm/hibernate/HibernateGormStaticApi.groovy | 69 ++++++---------------- .../orm/hibernate/query/HibernateHqlQuery.java | 8 +-- 2 files changed, 21 insertions(+), 56 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 f1a65f06d2..5be40fc1d8 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 @@ -247,7 +247,7 @@ class HibernateGormStaticApi<D> extends GormStaticApi<D> { def template = hibernateTemplate queryNamedArgs = new HashMap(queryNamedArgs) return (D) template.execute { Session session -> - def hqlQuery = HibernateHqlQuery.createHqlQuery(session, datastore as HibernateDatastore, sessionFactory, persistentEntity, queryString) + def hqlQuery = HibernateHqlQuery.createHqlQuery(session, datastore as HibernateDatastore, sessionFactory, persistentEntity, queryString, false) template.applySettings(hqlQuery.getQuery()); hqlQuery.populateQuerySettings(queryNamedArgs) hqlQuery.populateQuerySettings(args) @@ -275,7 +275,7 @@ class HibernateGormStaticApi<D> extends GormStaticApi<D> { def template = hibernateTemplate return (List<D>) template.execute { Session session -> - def hibernateHqlQuery = HibernateHqlQuery.createHqlQuery(session, datastore as HibernateDatastore, sessionFactory, persistentEntity,queryString) + def hibernateHqlQuery = HibernateHqlQuery.createHqlQuery(session, datastore as HibernateDatastore, sessionFactory, persistentEntity,queryString, false) template.applySettings(hibernateHqlQuery.getQuery()) hibernateHqlQuery.populateQuerySettings(params) hibernateHqlQuery.populateQuerySettings(args) @@ -293,25 +293,15 @@ class HibernateGormStaticApi<D> extends GormStaticApi<D> { if(sql instanceof GString) { sql = buildOrdinalParameterQueryFromGString((GString)sql, params) } + args = new HashMap(args) - NativeQuery q = (NativeQuery)session.createNativeQuery(sql.toString()) - template.applySettings(q) - - params.eachWithIndex { val, int i -> - i++ - if (val instanceof CharSequence) { - q.setParameter i, val.toString() - } - else { - q.setParameter i, val - } - } - q.addEntity(persistentClass) - populateQueryArguments(q, args) - q.setMaxResults(1) - - def results = createHqlQuery(session, q).list() + def hibernateHqlQuery = HibernateHqlQuery.createHqlQuery(session, datastore as HibernateDatastore, sessionFactory, persistentEntity, sql.toString(), true) + template.applySettings(hibernateHqlQuery.getQuery()) + args.put(DynamicFinder.ARGUMENT_MAX, 1) + hibernateHqlQuery.populateQuerySettings(args) + hibernateHqlQuery.populateQueryWithIndexedArguments(params) + def results = hibernateHqlQuery.list() if(results.isEmpty()) { return null } @@ -325,29 +315,18 @@ class HibernateGormStaticApi<D> extends GormStaticApi<D> { List<D> findAllWithSql(CharSequence sql, Map args = Collections.emptyMap()) { IHibernateTemplate template = hibernateTemplate return (List<D>) template.execute { Session session -> - List params = [] if(sql instanceof GString) { sql = buildOrdinalParameterQueryFromGString((GString)sql, params) } - NativeQuery q = (NativeQuery)session.createNativeQuery(sql.toString(),persistentEntity.javaClass) - - template.applySettings(q) - - params.eachWithIndex { val, int i -> - i++ - if (val instanceof CharSequence) { - q.setParameter i, val.toString() - } - else { - q.setParameter i, val - } - } - q.addEntity(persistentClass) - populateQueryArguments(q, args) + def hibernateHqlQuery =HibernateHqlQuery.createHqlQuery(session, datastore as HibernateDatastore, sessionFactory, persistentEntity, sql.toString(), true) + template.applySettings(hibernateHqlQuery.getQuery()) + hibernateHqlQuery.populateQuerySettings(args) + hibernateHqlQuery.populateQueryWithIndexedArguments(params) - return createHqlQuery(session, q).list() + def list = hibernateHqlQuery.list() + return list } } @@ -503,7 +482,7 @@ class HibernateGormStaticApi<D> extends GormStaticApi<D> { args = new HashMap(args) return (List<D>) template.execute { Session session -> - def hqlQuery = HibernateHqlQuery.createHqlQuery(session, datastore as HibernateDatastore, sessionFactory, persistentEntity, queryString) + def hqlQuery = HibernateHqlQuery.createHqlQuery(session, datastore as HibernateDatastore, sessionFactory, persistentEntity, queryString, false) template.applySettings(hqlQuery.getQuery()) hqlQuery.populateQuerySettings(args) hqlQuery.populateQueryWithIndexedArguments(params as List) @@ -889,20 +868,6 @@ class HibernateGormStaticApi<D> extends GormStaticApi<D> { datastore.applicationEventPublisher.publishEvent(new PreQueryEvent(datastore, hibernateQuery)) } - protected HibernateHqlQuery createHqlQuery(Session session, Query q) { - HibernateSession hibernateSession = new HibernateSession((HibernateDatastore) datastore, sessionFactory) - FlushMode hibernateMode = session.getHibernateFlushMode() - switch (hibernateMode) { - case FlushMode.AUTO: - hibernateSession.setFlushMode(FlushModeType.AUTO) - break - case FlushMode.ALWAYS: - hibernateSession.setFlushMode(FlushModeType.AUTO) - break - default: - hibernateSession.setFlushMode(FlushModeType.COMMIT) - } - return new HibernateHqlQuery(hibernateSession, persistentEntity, q) - } + } 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 576e469636..c3d8c77689 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 @@ -13,10 +13,8 @@ import org.grails.orm.hibernate.HibernateSession; import org.grails.orm.hibernate.exceptions.GrailsQueryException; import org.hibernate.FlushMode; import org.hibernate.SessionFactory; -import org.hibernate.query.NativeQuery; import org.springframework.context.ApplicationEventPublisher; -import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Optional; @@ -69,8 +67,10 @@ public class HibernateHqlQuery extends Query { , HibernateDatastore dataStore , SessionFactory sessionFactory , PersistentEntity persistentEntity - , String sqlString) { - var q = session.createQuery(sqlString, persistentEntity.getJavaClass()); + , String sqlString + , boolean isNative + ) { + var q = isNative ? session.createNativeQuery(sqlString, persistentEntity.getJavaClass()) : session.createQuery(sqlString, persistentEntity.getJavaClass()); var hibernateSession = new HibernateSession( dataStore, sessionFactory); HibernateHqlQuery hibernateHqlQuery = new HibernateHqlQuery(hibernateSession, persistentEntity, q); hibernateHqlQuery.setFlushMode(session.getHibernateFlushMode());