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; } }
