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 b1e91e4eaf5cc67eaaf62f4643095696e88b4577 Author: Walter Duque de Estrada <[email protected]> AuthorDate: Fri Mar 13 15:45:57 2026 -0500 hibernate 7: using more HibernatePersistentEntity --- .../org/grails/orm/hibernate/cfg/CompositeIdentity.groovy | 4 ++++ .../cfg/domainbinding/binder/CompositeIdBinder.java | 12 +++++------- .../cfg/domainbinding/binder/IdentityBinder.java | 3 ++- .../cfg/domainbinding/binder/SimpleIdBinder.java | 3 ++- .../cfg/domainbinding/CompositeIdBinderSpec.groovy | 7 ++++--- .../hibernate/cfg/domainbinding/IdentityBinderSpec.groovy | 15 ++++++++------- .../hibernate/cfg/domainbinding/SimpleIdBinderSpec.groovy | 11 ++++++----- 7 files changed, 31 insertions(+), 24 deletions(-) diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/CompositeIdentity.groovy b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/CompositeIdentity.groovy index 6dc34ca7ac..abc2ef384e 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/CompositeIdentity.groovy +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/CompositeIdentity.groovy @@ -79,6 +79,10 @@ class CompositeIdentity extends Property implements HibernateIdentity { throw new MappingException("Property referenced in composite-id mapping of class [${domainClass.name}] is not a valid property!") } + if (composite.length == 0) { + throw new MappingException("No composite identifier properties found for class [" + domainClass.getName() + "]"); + } + composite } } diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/CompositeIdBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/CompositeIdBinder.java index 90caf771c4..c9e0ee8cd7 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/CompositeIdBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/CompositeIdBinder.java @@ -28,6 +28,7 @@ import org.hibernate.mapping.RootClass; import org.grails.orm.hibernate.cfg.CompositeIdentity; import org.grails.orm.hibernate.cfg.GrailsHibernateUtil; import org.grails.orm.hibernate.cfg.domainbinding.hibernate.GrailsHibernatePersistentEntity; +import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernatePersistentEntity; import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernatePersistentProperty; @SuppressWarnings("PMD.DataflowAnomalyAnalysis") @@ -47,7 +48,7 @@ public class CompositeIdBinder { } public void bindCompositeId( - @Nonnull GrailsHibernatePersistentEntity domainClass, RootClass root,@Nonnull CompositeIdentity compositeIdentity) { + @Nonnull HibernatePersistentEntity domainClass, RootClass root, CompositeIdentity compositeIdentity) { Component id = new Component(metadataBuildingContext, root); id.setNullValue("undefined"); root.setIdentifier(id); @@ -61,12 +62,9 @@ public class CompositeIdBinder { id.setRoleName(path); - HibernatePersistentProperty[] composite; - if (compositeIdentity != null) { - composite = compositeIdentity.getHibernateProperties(domainClass); - } else { - composite = domainClass.getCompositeIdentity(); - } + HibernatePersistentProperty[] composite = compositeIdentity != null + ? compositeIdentity.getHibernateProperties(domainClass) + : domainClass.getCompositeIdentity(); if (composite == null || composite.length == 0) { throw new MappingException("No composite identifier properties found for class [" + domainClass.getName() + "]"); diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/IdentityBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/IdentityBinder.java index 4d82139eda..df3c070936 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/IdentityBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/IdentityBinder.java @@ -27,6 +27,7 @@ import org.grails.orm.hibernate.cfg.Identity; import org.grails.orm.hibernate.cfg.Mapping; import org.grails.orm.hibernate.cfg.domainbinding.hibernate.GrailsHibernatePersistentEntity; import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateIdentity; +import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernatePersistentEntity; public class IdentityBinder { @@ -38,7 +39,7 @@ public class IdentityBinder { this.compositeIdBinder = compositeIdBinder; } - public void bindIdentity(@Nonnull GrailsHibernatePersistentEntity domainClass, RootClass root) { + public void bindIdentity(@Nonnull HibernatePersistentEntity domainClass, RootClass root) { var id = domainClass.getHibernateIdentity(); if (id instanceof CompositeIdentity) { compositeIdBinder.bindCompositeId(domainClass, root, (CompositeIdentity) id); diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SimpleIdBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SimpleIdBinder.java index fbe30683c9..3a3397672f 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SimpleIdBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SimpleIdBinder.java @@ -35,6 +35,7 @@ import org.grails.orm.hibernate.cfg.Mapping; import org.grails.orm.hibernate.cfg.PropertyConfig; import org.grails.orm.hibernate.cfg.domainbinding.hibernate.GrailsHibernatePersistentEntity; import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateIdentityProperty; +import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernatePersistentEntity; import org.grails.orm.hibernate.cfg.domainbinding.util.BasicValueIdCreator; import static org.grails.orm.hibernate.cfg.domainbinding.binder.GrailsDomainBinder.EMPTY_PATH; @@ -63,7 +64,7 @@ public class SimpleIdBinder { } public void bindSimpleId( - @Nonnull GrailsHibernatePersistentEntity domainClass, RootClass entity, Identity mappedId, Table table) { + @Nonnull HibernatePersistentEntity domainClass, RootClass entity, Identity mappedId, Table table) { Mapping result = domainClass.getMappedForm(); boolean useSequence = result != null && result.isTablePerConcreteClass(); diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/CompositeIdBinderSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/CompositeIdBinderSpec.groovy index 7eaf7f56ba..a12a5ee5e2 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/CompositeIdBinderSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/CompositeIdBinderSpec.groovy @@ -5,6 +5,7 @@ import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernatePersistentP import org.grails.orm.hibernate.cfg.CompositeIdentity import org.grails.orm.hibernate.cfg.domainbinding.hibernate.GrailsHibernatePersistentEntity +import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernatePersistentEntity import org.hibernate.mapping.Component import org.hibernate.mapping.RootClass import org.hibernate.mapping.Table @@ -31,7 +32,7 @@ class CompositeIdBinderSpec extends HibernateGormDatastoreSpec { def "should bind composite id using property names from CompositeIdentity"() { given: - def domainClass = Mock(GrailsHibernatePersistentEntity) + def domainClass = Mock(HibernatePersistentEntity) def metadataBuildingContext = getGrailsDomainBinder().getMetadataBuildingContext() def root = new RootClass(metadataBuildingContext) root.setEntityName("MyEntity") @@ -63,7 +64,7 @@ class CompositeIdBinderSpec extends HibernateGormDatastoreSpec { def "should fallback to domainClass composite identity when CompositeIdentity is null"() { given: - def domainClass = Mock(GrailsHibernatePersistentEntity) + def domainClass = Mock(HibernatePersistentEntity) def metadataBuildingContext = getGrailsDomainBinder().getMetadataBuildingContext() def root = new RootClass(metadataBuildingContext) root.setEntityName("MyEntity") @@ -88,7 +89,7 @@ class CompositeIdBinderSpec extends HibernateGormDatastoreSpec { def "should throw MappingException if no composite properties found"() { given: - def domainClass = Mock(GrailsHibernatePersistentEntity) + def domainClass = Mock(HibernatePersistentEntity) def metadataBuildingContext = getGrailsDomainBinder().getMetadataBuildingContext() def root = new RootClass(metadataBuildingContext) root.setEntityName("MyEntity") diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/IdentityBinderSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/IdentityBinderSpec.groovy index de2bef34de..fd1916174b 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/IdentityBinderSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/IdentityBinderSpec.groovy @@ -23,6 +23,7 @@ import org.grails.datastore.mapping.model.ClassMapping import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernatePersistentProperty import org.grails.orm.hibernate.cfg.CompositeIdentity import org.grails.orm.hibernate.cfg.domainbinding.hibernate.GrailsHibernatePersistentEntity +import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernatePersistentEntity import org.grails.orm.hibernate.cfg.Identity import org.grails.orm.hibernate.cfg.Mapping import org.hibernate.boot.spi.InFlightMetadataCollector @@ -48,7 +49,7 @@ class IdentityBinderSpec extends HibernateGormDatastoreSpec { def "should delegate to simpleIdBinder when mapping is null and domainClass has simple identity"() { given: - def domainClass = Mock(GrailsHibernatePersistentEntity) + def domainClass = Mock(HibernatePersistentEntity) def root = new RootClass(getGrailsDomainBinder().getMetadataBuildingContext()) def mappings = Mock(InFlightMetadataCollector) def identifierProp = Mock(HibernatePersistentProperty) @@ -67,7 +68,7 @@ class IdentityBinderSpec extends HibernateGormDatastoreSpec { def "should delegate to compositeIdBinder when mapping is null and domainClass has composite identity"() { given: - def domainClass = Mock(GrailsHibernatePersistentEntity) + def domainClass = Mock(HibernatePersistentEntity) def root = new RootClass(getGrailsDomainBinder().getMetadataBuildingContext()) def mappings = Mock(InFlightMetadataCollector) def compositeProps = [Mock(HibernatePersistentProperty), Mock(HibernatePersistentProperty)] as HibernatePersistentProperty[] @@ -85,7 +86,7 @@ class IdentityBinderSpec extends HibernateGormDatastoreSpec { def "should delegate to compositeIdBinder when mapping specifies composite identity"() { given: - def domainClass = Mock(GrailsHibernatePersistentEntity) + def domainClass = Mock(HibernatePersistentEntity) def root = new RootClass(getGrailsDomainBinder().getMetadataBuildingContext()) def mappings = Mock(InFlightMetadataCollector) def gormMapping = Mock(Mapping) @@ -102,7 +103,7 @@ class IdentityBinderSpec extends HibernateGormDatastoreSpec { def "should delegate to simpleIdBinder when mapping specifies simple identity"() { given: - def domainClass = Mock(GrailsHibernatePersistentEntity) + def domainClass = Mock(HibernatePersistentEntity) def root = new RootClass(getGrailsDomainBinder().getMetadataBuildingContext()) def mappings = Mock(InFlightMetadataCollector) def gormMapping = Mock(Mapping) @@ -123,7 +124,7 @@ class IdentityBinderSpec extends HibernateGormDatastoreSpec { def "should not lookup property by name if identity name matches domain class name"() { given: - def domainClass = Mock(GrailsHibernatePersistentEntity) + def domainClass = Mock(HibernatePersistentEntity) def root = new RootClass(getGrailsDomainBinder().getMetadataBuildingContext()) def mappings = Mock(InFlightMetadataCollector) def gormMapping = Mock(Mapping) @@ -143,7 +144,7 @@ class IdentityBinderSpec extends HibernateGormDatastoreSpec { def "should pass identity with name set to simpleIdBinder"() { given: - def domainClass = Mock(GrailsHibernatePersistentEntity) + def domainClass = Mock(HibernatePersistentEntity) def root = new RootClass(getGrailsDomainBinder().getMetadataBuildingContext()) def mappings = Mock(InFlightMetadataCollector) def gormMapping = Mock(Mapping) @@ -163,7 +164,7 @@ class IdentityBinderSpec extends HibernateGormDatastoreSpec { def "should create synthetic identifier property if it doesn't exist"() { given: - def domainClass = Mock(GrailsHibernatePersistentEntity) + def domainClass = Mock(HibernatePersistentEntity) def root = new RootClass(getGrailsDomainBinder().getMetadataBuildingContext()) def mappings = Mock(InFlightMetadataCollector) def identity = new Identity() diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleIdBinderSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleIdBinderSpec.groovy index 2c7aa30dff..095dbca766 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleIdBinderSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleIdBinderSpec.groovy @@ -3,6 +3,7 @@ package org.grails.orm.hibernate.cfg.domainbinding import grails.gorm.specs.HibernateGormDatastoreSpec import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernatePersistentProperty import org.grails.orm.hibernate.cfg.domainbinding.hibernate.GrailsHibernatePersistentEntity +import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernatePersistentEntity import org.grails.orm.hibernate.cfg.Identity import org.hibernate.boot.spi.MetadataBuildingContext import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment @@ -44,7 +45,7 @@ class SimpleIdBinderSpec extends HibernateGormDatastoreSpec { // Use a Mock for BasicValueIdCreator and return a BasicValue based on the currentTable basicValueIdCreator = Mock(BasicValueIdCreator) - basicValueIdCreator.getBasicValueId(_, _, _, _, _) >> { MetadataBuildingContext ctx, Table table, Identity id, GrailsHibernatePersistentEntity domainClass, boolean useSeq -> + basicValueIdCreator.getBasicValueId(_, _, _, _, _) >> { MetadataBuildingContext ctx, Table table, Identity id, HibernatePersistentEntity domainClass, boolean useSeq -> return new BasicValue(ctx, table) } @@ -63,7 +64,7 @@ class SimpleIdBinderSpec extends HibernateGormDatastoreSpec { def testProperty = Mock(HibernatePersistentProperty) { getName() >> "id" } - def domainClass = Mock(GrailsHibernatePersistentEntity) { + def domainClass = Mock(HibernatePersistentEntity) { getMappedForm() >> mapping getIdentity() >> testProperty getName() >> "TestEntity" @@ -93,7 +94,7 @@ class SimpleIdBinderSpec extends HibernateGormDatastoreSpec { def testProperty = Mock(HibernatePersistentProperty) { getName() >> "id" } - def domainClass = Mock(GrailsHibernatePersistentEntity) { + def domainClass = Mock(HibernatePersistentEntity) { getMappedForm() >> mapping getIdentity() >> testProperty getName() >> "TestEntity" @@ -117,7 +118,7 @@ class SimpleIdBinderSpec extends HibernateGormDatastoreSpec { def "bindSimpleId with non-existent identifier property"() { given: - def domainClass = Mock(GrailsHibernatePersistentEntity) { + def domainClass = Mock(HibernatePersistentEntity) { getName() >> "TestEntity" getHibernatePropertyByName("nonExistent") >> null getIdentity() >> Mock(HibernatePersistentProperty) @@ -138,7 +139,7 @@ class SimpleIdBinderSpec extends HibernateGormDatastoreSpec { isTablePerConcreteClass() >> false } def reflector = Mock(EntityReflector) - def domainClass = Mock(GrailsHibernatePersistentEntity) { + def domainClass = Mock(HibernatePersistentEntity) { getMappedForm() >> mapping getIdentity() >> null getName() >> "TestEntity"
