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 fd162edc7d28eb4d6d2ce0b76949b649b4cbd814 Author: Walter Duque de Estrada <[email protected]> AuthorDate: Wed Mar 4 15:36:01 2026 -0600 refactor(hibernate7): more cleanup HibernateGormStaticApi --- .../orm/hibernate/HibernateGormStaticApi.groovy | 26 +++++------ .../hibernate/HibernateGormStaticApiSpec.groovy | 51 ++++++++++++++++++++++ 2 files changed, 61 insertions(+), 16 deletions(-) diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/HibernateGormStaticApi.groovy b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/HibernateGormStaticApi.groovy index 2ac3406a78..e4b923d5e0 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/HibernateGormStaticApi.groovy +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/HibernateGormStaticApi.groovy @@ -15,11 +15,11 @@ */ package org.grails.orm.hibernate +import org.hibernate.jpa.AvailableHints + import org.grails.datastore.mapping.model.PersistentProperty -import org.hibernate.query.criteria.JpaRoot import grails.orm.HibernateCriteriaBuilder -import groovy.transform.CompileDynamic import groovy.transform.CompileStatic import groovy.util.logging.Slf4j import jakarta.persistence.criteria.Expression @@ -43,7 +43,6 @@ import org.grails.orm.hibernate.support.HibernateRuntimeUtils import org.hibernate.LockMode import org.hibernate.Session import org.hibernate.SessionFactory -import org.hibernate.jpa.QueryHints import org.hibernate.query.Query import org.springframework.core.convert.ConversionService @@ -91,13 +90,13 @@ class HibernateGormStaticApi<D> extends GormStaticApi<D> { } @Override - public <T> T withNewSession(Closure<T> callable) { + <T> T withNewSession(Closure<T> callable) { HibernateDatastore hibernateDatastore = (HibernateDatastore) datastore hibernateDatastore.withNewSession(callable) } @Override - def <T> T withSession(Closure<T> callable) { + <T> T withSession(Closure<T> callable) { HibernateDatastore hibernateDatastore = (HibernateDatastore) datastore hibernateDatastore.withSession(callable) } @@ -121,7 +120,7 @@ class HibernateGormStaticApi<D> extends GormStaticApi<D> { } else { // for non multi-tenant entities we process get(..) via the second level cache - hibernateTemplate.get(persistentEntity.javaClass, id) + (D) hibernateTemplate.execute { Session session -> session.find(persistentEntity.javaClass, id) } } } @@ -145,7 +144,7 @@ class HibernateGormStaticApi<D> extends GormStaticApi<D> { criteriaBuilder.equal((Expression<?>) queryRoot.get(persistentEntity.identity.name), id) ) Query criteria = session.createQuery(criteriaQuery) - .setHint(QueryHints.HINT_READONLY, true) + .setHint(AvailableHints.HINT_READ_ONLY, true) HibernateHqlQuery hibernateHqlQuery = new HibernateHqlQuery( hibernateSession, persistentEntity, criteria) return proxyHandler.unwrap( hibernateHqlQuery.singleResult() ) @@ -178,7 +177,7 @@ class HibernateGormStaticApi<D> extends GormStaticApi<D> { @Override List<D> getAll() { - new HibernateQuery(hibernateSession, persistentEntity).list() + createHibernateQuery().list() } protected HibernateQuery createHibernateQuery() { @@ -187,12 +186,12 @@ class HibernateGormStaticApi<D> extends GormStaticApi<D> { @Override Integer count() { - new HibernateQuery(hibernateSession,persistentEntity ).count().singleResult() as Integer + createHibernateQuery().count().singleResult() as Integer } @Override boolean exists(Serializable id) { - !new HibernateQuery(hibernateSession,persistentEntity ).idEq(convertIdentifier(id)).list().isEmpty() + !createHibernateQuery().idEq(convertIdentifier(id)).list().isEmpty() } @Override @@ -453,7 +452,7 @@ class HibernateGormStaticApi<D> extends GormStaticApi<D> { else if(conversionService.canConvert(idInstanceType, identityType)) { try { return (Serializable)conversionService.convert(id, identityType) - } catch (Throwable e) { + } catch (Throwable ignored) { return null } } @@ -471,11 +470,6 @@ class HibernateGormStaticApi<D> extends GormStaticApi<D> { - private String normalizeMultiLineQueryString(String query) { - if (query?.indexOf('\n') != -1) - return query?.trim().replace('\n', ' ') - return query - } @Override List<D> list(Map params = Collections.emptyMap()) { diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/HibernateGormStaticApiSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/HibernateGormStaticApiSpec.groovy index 5b9eb319d7..d1e5c73653 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/HibernateGormStaticApiSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/HibernateGormStaticApiSpec.groovy @@ -451,6 +451,57 @@ class HibernateGormStaticApiSpec extends HibernateGormDatastoreSpec { instances.find { it.id == e3.id } } + void "Test getAll with empty list returns empty list"() { + when: + def instances = HibernateGormStaticApiEntity.getAll([]) + + then: + instances == [] + } + + void "Test getAll preserves input id order"() { + given: + def e1 = new HibernateGormStaticApiEntity(name: "first").save(failOnError: true) + def e2 = new HibernateGormStaticApiEntity(name: "second").save(failOnError: true) + def e3 = new HibernateGormStaticApiEntity(name: "third").save(flush: true, failOnError: true) + + when: "ids are requested in reverse order" + def instances = HibernateGormStaticApiEntity.getAll([e3.id, e1.id, e2.id]) + + then: "results are in the same order as the requested ids" + instances.size() == 3 + instances[0].id == e3.id + instances[1].id == e1.id + instances[2].id == e2.id + } + + void "Test getAll returns null in position for non-existent ids"() { + given: + def e1 = new HibernateGormStaticApiEntity(name: "exists").save(flush: true, failOnError: true) + def missingId = e1.id + 9999L + + when: + def instances = HibernateGormStaticApiEntity.getAll([e1.id, missingId]) + + then: + instances.size() == 2 + instances[0].id == e1.id + instances[1] == null + } + + void "Test getAll with duplicate ids returns entry at each position"() { + given: + def e1 = new HibernateGormStaticApiEntity(name: "dup").save(flush: true, failOnError: true) + + when: + def instances = HibernateGormStaticApiEntity.getAll([e1.id, e1.id]) + + then: + instances.size() == 2 + instances[0].id == e1.id + instances[1].id == e1.id + } + void "Test list method"() { given: new HibernateGormStaticApiEntity(name: "test1").save(failOnError: true)
