This is an automated email from the ASF dual-hosted git repository. borinquenkid pushed a commit to branch 8.0.x-hibernate7 in repository https://gitbox.apache.org/repos/asf/grails-core.git
commit 7600f5d1338fd6d72ce998f2f0c78b966da43631 Author: Walter B Duque de Estrada <[email protected]> AuthorDate: Mon Jan 26 16:59:32 2026 -0600 cleanup --- grails-data-hibernate7/core/01.txt | 11 ++++++++ grails-data-hibernate7/core/02.txt | 10 +++++++ grails-data-hibernate7/core/HIBERNATE7-TESTS.csv | 9 ------ .../orm/hibernate/cfg/GrailsDomainBinder.java | 32 ++++------------------ .../cfg/GrailsHibernatePersistentEntity.java | 15 ++++++++++ 5 files changed, 41 insertions(+), 36 deletions(-) diff --git a/grails-data-hibernate7/core/01.txt b/grails-data-hibernate7/core/01.txt new file mode 100644 index 0000000000..8ecab2edc3 --- /dev/null +++ b/grails-data-hibernate7/core/01.txt @@ -0,0 +1,11 @@ +AttachMethodSpec. Test attach method +BuiltinUniqueConstraintWorksWithTargetProxiesConstraintsSpec. test unique constraint for the associated child object +BuiltinUniqueConstraintWorksWithTargetProxiesConstraintsSpec. test unique constraint on root instance +CascadeBehaviorFetcherSpec. test cascade behavior fetcher for embedded association +CascadeBehaviorFetcherSpec. test cascade behavior fetcher for uni: String +DirtyCheckingSpec. test relationships not marked dirty when domain objects are used +JoinPerfSpec. test read performance with join query +QueryEventsSpec. post-events are fired after queries are run +QueryEventsSpec. pre-events are fired before queries are run +SessionCreationEventSpec. test event for new session + diff --git a/grails-data-hibernate7/core/02.txt b/grails-data-hibernate7/core/02.txt new file mode 100644 index 0000000000..18ce578abd --- /dev/null +++ b/grails-data-hibernate7/core/02.txt @@ -0,0 +1,10 @@ +AttachMethodSpec. Test attach method +BuiltinUniqueConstraintWorksWithTargetProxiesConstraintsSpec. test unique constraint for the associated child object +BuiltinUniqueConstraintWorksWithTargetProxiesConstraintsSpec. test unique constraint on root instance +CascadeBehaviorFetcherSpec. test cascade behavior fetcher for embedded association +CascadeBehaviorFetcherSpec. test cascade behavior fetcher for uni: String +DirtyCheckingSpec. test relationships not marked dirty when domain objects are used +JoinPerfSpec. test read performance with join query +QueryEventsSpec. post-events are fired after queries are run +QueryEventsSpec. pre-events are fired before queries are run +SessionCreationEventSpec. test event for new session \ No newline at end of file diff --git a/grails-data-hibernate7/core/HIBERNATE7-TESTS.csv b/grails-data-hibernate7/core/HIBERNATE7-TESTS.csv deleted file mode 100644 index 1ae5079d70..0000000000 --- a/grails-data-hibernate7/core/HIBERNATE7-TESTS.csv +++ /dev/null @@ -1,9 +0,0 @@ -Test File , Status , Notes -`src/test/groovy/grails/gorm/specs/perf/JoinPerfSpec.groovy` , FAILED , -`TCK: org.apache.grails.data.testing.tck.tests.AttachMethodSpec` , FAILED , -`TCK: org.apache.grails.data.testing.tck.tests.BuiltinUniqueConstraintWorksWithTargetProxiesConstraintsSpec` , FAILED , -`TCK: org.apache.grails.data.testing.tck.tests.GroovyProxySpec` , SKIPPED , Requires fix in GORM Hibernate 7 implementation for proxy initialization (isInitialized method) for native proxies. -`TCK: org.apache.grails.data.testing.tck.tests.QueryEventsSpec` , FAILED , -`TCK: org.apache.grails.data.testing.tck.tests.SessionCreationEventSpec` , FAILED , -`TCK: org.apache.grails.data.testing.tck.tests.UpdateWithProxyPresentSpec` , NOT SUPPORTED , Not supported in Hibernate 7. -`TCK: org.apache.grails.data.testing.tck.tests.NamedQuerySpec` , NOT SUPPORTED , Not supported in Hibernate 7. diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java index 8f7a4af37f..519719eb6d 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java @@ -1124,6 +1124,7 @@ public class GrailsDomainBinder if (entity != null) { m = entity.getMappedForm(); } + final Mapping finalMapping = m; boolean tablePerSubclass = !m.getTablePerHierarchy(); if (!tablePerSubclass) { // if the root class has children create a discriminator property @@ -1131,7 +1132,8 @@ public class GrailsDomainBinder bindDiscriminatorProperty(root.getTable(), root, m); } // bind the sub classes - bindSubClasses(entity, root, mappings, sessionFactoryBeanName, m); + entity.getChildEntities(dataSourceName) + .forEach(sub -> bindSubClass(sub, root, mappings, sessionFactoryBeanName, finalMapping)); } addMultiTenantFilterIfNecessary(entity, root, mappings, sessionFactoryBeanName); @@ -1187,31 +1189,6 @@ public class GrailsDomainBinder } } - /** - * Binds the sub classes of a root class using table-per-heirarchy inheritance mapping - * - * @param domainClass The root domain class to bind - * @param parent The parent class instance - * @param mappings The mappings instance - * @param sessionFactoryBeanName the session factory bean name - * @param m - */ - private void bindSubClasses(GrailsHibernatePersistentEntity domainClass, PersistentClass parent, - InFlightMetadataCollector mappings, String sessionFactoryBeanName, Mapping m) { - domainClass.getMappingContext() - .getDirectChildEntities(domainClass) - .stream() - .filter(GrailsHibernatePersistentEntity.class::isInstance) - .map(GrailsHibernatePersistentEntity.class::cast) - .filter(persistentEntity -> persistentEntity.usesConnectionSource(dataSourceName)) - .filter(sub -> isChildEntity(sub, domainClass)) - .forEach( sub -> bindSubClass(sub, parent, mappings, sessionFactoryBeanName, m)); - - } - - private boolean isChildEntity(GrailsHibernatePersistentEntity sub, GrailsHibernatePersistentEntity parent) { - return sub.getJavaClass().getSuperclass().equals(parent.getJavaClass()); - } /** * Binds a sub class. @@ -1285,7 +1262,8 @@ public class GrailsDomainBinder final java.util.Collection<PersistentEntity> childEntities = sub.getMappingContext().getDirectChildEntities(sub); if (!childEntities.isEmpty()) { // bind the sub classes - bindSubClasses(sub, subClass, mappings, sessionFactoryBeanName, m); + sub.getChildEntities(dataSourceName) + .forEach(sub1 -> bindSubClass(sub1, subClass, mappings, sessionFactoryBeanName, m)); } } diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsHibernatePersistentEntity.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsHibernatePersistentEntity.java index 774d01da84..05a326f2dc 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsHibernatePersistentEntity.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsHibernatePersistentEntity.java @@ -1,5 +1,7 @@ package org.grails.orm.hibernate.cfg; +import java.util.List; + import org.grails.datastore.mapping.model.PersistentEntity; import org.grails.datastore.mapping.model.PersistentProperty; @@ -16,4 +18,17 @@ public interface GrailsHibernatePersistentEntity extends PersistentEntity { PersistentProperty[] getCompositeIdentity(); boolean isAbstract(); + + + default List<GrailsHibernatePersistentEntity> getChildEntities(String dataSourceName) { + return getMappingContext() + .getDirectChildEntities(this) + .stream() + .filter(GrailsHibernatePersistentEntity.class::isInstance) + .map(GrailsHibernatePersistentEntity.class::cast) + .filter(persistentEntity -> persistentEntity.usesConnectionSource(dataSourceName)) + .filter(sub -> sub.getJavaClass().getSuperclass().equals(this.getJavaClass())) + .toList(); + } + }
