You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@grails.apache.org by bo...@apache.org on 2026/03/05 18:31:20 UTC
(grails-core) 15/27: refactor(hibernate7): cleanup HibernateSession
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 <wb...@mac.com>
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;
}
}