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 755ba4f98355d298ac67eaaa9ec9783a8d2f1ded
Author: Walter Duque de Estrada <[email protected]>
AuthorDate: Wed Mar 4 16:12:02 2026 -0600

    refactor(hibernate7): cleanup HibernateSession
---
 .../org/grails/orm/hibernate/HibernateSession.java | 86 ++++++++++------------
 1 file changed, 38 insertions(+), 48 deletions(-)

diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/HibernateSession.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/HibernateSession.java
index 2c17bb95d4..03e44da550 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/HibernateSession.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/HibernateSession.java
@@ -19,6 +19,7 @@
 package org.grails.orm.hibernate;
 
 import jakarta.persistence.FlushModeType;
+import jakarta.persistence.LockModeType;
 import jakarta.persistence.criteria.CriteriaBuilder;
 import jakarta.persistence.criteria.CriteriaQuery;
 import jakarta.persistence.criteria.Root;
@@ -52,6 +53,8 @@ import org.grails.orm.hibernate.query.HibernateHqlQuery;
 import org.grails.orm.hibernate.query.HibernateQuery;
 import org.hibernate.*;
 import org.hibernate.proxy.HibernateProxy;
+import org.hibernate.query.MutationQuery;
+
 import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.transaction.TransactionDefinition;
 import 
org.springframework.transaction.support.TransactionSynchronizationManager;
@@ -124,8 +127,7 @@ public class HibernateSession extends 
AbstractAttributeStoringSession
       org.grails.datastore.mapping.model.PersistentEntity pe =
           ctx.getPersistentEntity(o.getClass().getName());
       if (pe != null) {
-        Object id = ctx.getEntityReflector(pe).getIdentifier(o);
-        return id == null ? null : (Serializable) id;
+          return ctx.getEntityReflector(pe).getIdentifier(o);
       }
     } catch (Exception ignored) {
       // ignore and return null when identifier cannot be obtained
@@ -185,7 +187,7 @@ public class HibernateSession extends 
AbstractAttributeStoringSession
   }
 
   public <T> T retrieve(Class<T> type, Serializable key) {
-    return hibernateTemplate.get(type, key);
+    return getHibernateTemplate().execute(session -> session.find(type, key));
   }
 
   public <T> T proxy(Class<T> type, Serializable key) {
@@ -193,7 +195,7 @@ public class HibernateSession extends 
AbstractAttributeStoringSession
   }
 
   public <T> T lock(Class<T> type, Serializable key) {
-    return hibernateTemplate.get(type, key, LockMode.PESSIMISTIC_WRITE);
+    return getHibernateTemplate().execute(session -> session.find(type, key, 
LockModeType.PESSIMISTIC_WRITE));
   }
 
   public void delete(Iterable objects) {
@@ -201,16 +203,13 @@ public class HibernateSession extends 
AbstractAttributeStoringSession
     hibernateTemplate.deleteAll(list);
   }
 
-  @SuppressWarnings("unchecked")
-  protected Collection getIterableAsCollection(Iterable objects) {
-    Collection list;
-    if (objects instanceof Collection) {
-      list = (Collection) objects;
-    } else {
-      list = new ArrayList();
-      for (Object object : objects) {
-        list.add(object);
-      }
+  protected Collection<?> getIterableAsCollection(Iterable<?> objects) {
+    if (objects instanceof Collection<?> coll) {
+      return coll;
+    }
+    List<Object> list = new ArrayList<>();
+    for (Object object : objects) {
+      list.add(object);
     }
     return list;
   }
@@ -292,16 +291,7 @@ public class HibernateSession extends 
AbstractAttributeStoringSession
                   builder.setHibernateCompatible(true);
                   JpaQueryInfo jpaQueryInfo = builder.buildDelete();
 
-                  org.hibernate.query.Query query = 
session.createQuery(jpaQueryInfo.getQuery());
-                  getHibernateTemplate().applySettings(query);
-
-                  List parameters = jpaQueryInfo.getParameters();
-                  if (parameters != null) {
-                    for (int i = 0, count = parameters.size(); i < count; i++) 
{
-                      query.setParameter(
-                          JpaQueryBuilder.PARAMETER_NAME_PREFIX + (i + 1), 
parameters.get(i));
-                    }
-                  }
+                  var query = createMutationQuery(session, jpaQueryInfo);
 
                   HibernateHqlQuery hqlQuery =
                       new HibernateHqlQuery(
@@ -316,6 +306,19 @@ public class HibernateSession extends 
AbstractAttributeStoringSession
                 });
   }
 
+  private MutationQuery createMutationQuery(Session session, JpaQueryInfo 
jpaQueryInfo) {
+    org.hibernate.query.MutationQuery query = 
session.createMutationQuery(jpaQueryInfo.getQuery());
+
+    List<?> parameters = jpaQueryInfo.getParameters();
+    if (parameters != null) {
+      for (int i = 0, count = parameters.size(); i < count; i++) {
+        query.setParameter(
+            JpaQueryBuilder.PARAMETER_NAME_PREFIX + (i + 1), 
parameters.get(i));
+      }
+    }
+    return query;
+  }
+
   /**
    * Updates all objects matching the given criteria and property values.
    *
@@ -340,22 +343,15 @@ public class HibernateSession extends 
AbstractAttributeStoringSession
                     if (timestampProvider == null) {
                       timestampProvider = new DefaultTimestampProvider();
                     }
+                    Class<?> type = lastUpdated.getType();
                     properties.put(
                         GormProperties.LAST_UPDATED,
-                        
timestampProvider.createTimestamp(lastUpdated.getType()));
+                        timestampProvider.createTimestamp(type));
                   }
 
                   JpaQueryInfo jpaQueryInfo = builder.buildUpdate(properties);
 
-                  org.hibernate.query.Query query = 
session.createQuery(jpaQueryInfo.getQuery());
-                  getHibernateTemplate().applySettings(query);
-                  List parameters = jpaQueryInfo.getParameters();
-                  if (parameters != null) {
-                    for (int i = 0, count = parameters.size(); i < count; i++) 
{
-                      query.setParameter(
-                          JpaQueryBuilder.PARAMETER_NAME_PREFIX + (i + 1), 
parameters.get(i));
-                    }
-                  }
+                  var query = createMutationQuery(session, jpaQueryInfo);
 
                   HibernateHqlQuery hqlQuery =
                       new HibernateHqlQuery(HibernateSession.this, 
targetEntity, query);
@@ -369,7 +365,7 @@ public class HibernateSession extends 
AbstractAttributeStoringSession
                 });
   }
 
-  @SuppressWarnings("PMD.DataflowAnomalyAnalysis")
+  @SuppressWarnings({"PMD.DataflowAnomalyAnalysis", "unchecked"})
   public List retrieveAll(final Class type, final Iterable keys) {
     final PersistentEntity persistentEntity =
         getMappingContext().getPersistentEntity(type.getName());
@@ -377,13 +373,13 @@ public class HibernateSession extends 
AbstractAttributeStoringSession
         .execute(
             session -> {
               final CriteriaBuilder criteriaBuilder = 
session.getCriteriaBuilder();
-              CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(type);
-              final Root root = criteriaQuery.from(type);
+              CriteriaQuery<?> criteriaQuery = 
criteriaBuilder.createQuery(type);
+              final Root<?> root = criteriaQuery.from(type);
               final String id = persistentEntity.getIdentity().getName();
               criteriaQuery =
                   criteriaQuery.where(
                       
criteriaBuilder.in(root.get(id).in(getIterableAsCollection(keys))));
-              final org.hibernate.query.Query jpaQuery = 
session.createQuery(criteriaQuery);
+              final org.hibernate.query.Query<?> jpaQuery = 
session.createQuery(criteriaQuery);
               getHibernateTemplate().applySettings(jpaQuery);
 
               return new HibernateHqlQuery(this, persistentEntity, 
jpaQuery).list();
@@ -416,16 +412,10 @@ public class HibernateSession extends 
AbstractAttributeStoringSession
   }
 
   public FlushModeType getFlushMode() {
-    switch (hibernateTemplate.getFlushMode()) {
-      case GrailsHibernateTemplate.FLUSH_AUTO:
-        return FlushModeType.AUTO;
-      case GrailsHibernateTemplate.FLUSH_COMMIT:
-        return FlushModeType.COMMIT;
-      case GrailsHibernateTemplate.FLUSH_ALWAYS:
-        return FlushModeType.AUTO;
-      default:
-        return FlushModeType.AUTO;
-    }
+      if (hibernateTemplate.getFlushMode() == 
GrailsHibernateTemplate.FLUSH_COMMIT) {
+          return FlushModeType.COMMIT;
+      }
+      return FlushModeType.AUTO;
   }
 }
 

Reply via email to