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 7eb3b5e57c38c1f229e873892bbf8ba35d2da4bb Author: Walter Duque de Estrada <[email protected]> AuthorDate: Mon Mar 9 19:48:18 2026 -0500 hibernate7: Modify NaturalIdentifierBinder to accept GrailsHibernatePersistentEntity instead of Mapping for better consistency with other binders. --- .../cfg/domainbinding/binder/ClassPropertiesBinder.java | 2 +- .../cfg/domainbinding/binder/NaturalIdentifierBinder.java | 8 +++++--- .../cfg/domainbinding/NaturalIdentifierBinderSpec.groovy | 13 ++++++++++--- .../domainbinding/binder/ClassPropertiesBinderSpec.groovy | 2 +- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ClassPropertiesBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ClassPropertiesBinder.java index a25a6eb841..1b6e2874f3 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ClassPropertiesBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ClassPropertiesBinder.java @@ -78,7 +78,7 @@ public class ClassPropertiesBinder { propertyFromValueCreator.createProperty(value, currentGrailsProp)); } - naturalIdentifierBinder.bindNaturalIdentifier(domainClass.getMappedForm(), persistentClass); + naturalIdentifierBinder.bindNaturalIdentifier(domainClass, persistentClass); } @Nonnull private Table getTable(PersistentClass persistentClass) { diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/NaturalIdentifierBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/NaturalIdentifierBinder.java index 87bc1d8f38..0602c02808 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/NaturalIdentifierBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/NaturalIdentifierBinder.java @@ -19,7 +19,7 @@ package org.grails.orm.hibernate.cfg.domainbinding.binder; import java.util.Optional; -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.util.UniqueNameGenerator; import org.hibernate.mapping.PersistentClass; @@ -36,8 +36,10 @@ public class NaturalIdentifierBinder { this(new UniqueNameGenerator()); } - public void bindNaturalIdentifier(Mapping mapping, PersistentClass persistentClass) { - Optional.ofNullable(mapping.getIdentity()) + public void bindNaturalIdentifier( + GrailsHibernatePersistentEntity persistentEntity, + PersistentClass persistentClass) { + Optional.ofNullable(persistentEntity.getMappedForm().getIdentity()) .map(HibernateIdentity::getNatural) .flatMap(naturalId -> naturalId.createUniqueKey(persistentClass)) .ifPresent( diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/NaturalIdentifierBinderSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/NaturalIdentifierBinderSpec.groovy index 103ecb81b6..3c69ed8822 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/NaturalIdentifierBinderSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/NaturalIdentifierBinderSpec.groovy @@ -5,6 +5,7 @@ import org.grails.orm.hibernate.cfg.CompositeIdentity import org.grails.orm.hibernate.cfg.Mapping import org.grails.orm.hibernate.cfg.NaturalId import org.grails.orm.hibernate.cfg.domainbinding.binder.NaturalIdentifierBinder +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.util.UniqueNameGenerator import org.hibernate.mapping.RootClass @@ -15,6 +16,7 @@ class NaturalIdentifierBinderSpec extends HibernateGormDatastoreSpec { void "test bindNaturalIdentifier calls NaturalId.createUniqueKey and handles result"() { given: + def persistentEntity = Mock(GrailsHibernatePersistentEntity) def mapping = Mock(Mapping) def identity = Mock(HibernateIdentity) def naturalId = Mock(NaturalId) @@ -25,12 +27,13 @@ class NaturalIdentifierBinderSpec extends HibernateGormDatastoreSpec { def uniqueNameGenerator = Mock(UniqueNameGenerator) def binder = new NaturalIdentifierBinder(uniqueNameGenerator) + persistentEntity.getMappedForm() >> mapping mapping.getIdentity() >> identity identity.getNatural() >> naturalId naturalId.createUniqueKey(rootClass) >> Optional.of(uk) when: - binder.bindNaturalIdentifier(mapping, rootClass) + binder.bindNaturalIdentifier(persistentEntity, rootClass) then: 1 * uniqueNameGenerator.setGeneratedUniqueName(uk) @@ -39,6 +42,7 @@ class NaturalIdentifierBinderSpec extends HibernateGormDatastoreSpec { void "test bindNaturalIdentifier when NaturalId returns empty result"() { given: + def persistentEntity = Mock(GrailsHibernatePersistentEntity) def mapping = Mock(Mapping) def identity = Mock(HibernateIdentity) def naturalId = Mock(NaturalId) @@ -46,12 +50,13 @@ class NaturalIdentifierBinderSpec extends HibernateGormDatastoreSpec { def uniqueNameGenerator = Mock(UniqueNameGenerator) def binder = new NaturalIdentifierBinder(uniqueNameGenerator) + persistentEntity.getMappedForm() >> mapping mapping.getIdentity() >> identity identity.getNatural() >> naturalId naturalId.createUniqueKey(rootClass) >> Optional.empty() when: - binder.bindNaturalIdentifier(mapping, rootClass) + binder.bindNaturalIdentifier(persistentEntity, rootClass) then: 0 * uniqueNameGenerator._ @@ -59,15 +64,17 @@ class NaturalIdentifierBinderSpec extends HibernateGormDatastoreSpec { void "test bindNaturalIdentifier when no identity is defined"() { given: + def persistentEntity = Mock(GrailsHibernatePersistentEntity) def mapping = Mock(Mapping) def rootClass = new RootClass(getGrailsDomainBinder().getMetadataBuildingContext()) def uniqueNameGenerator = Mock(UniqueNameGenerator) def binder = new NaturalIdentifierBinder(uniqueNameGenerator) + persistentEntity.getMappedForm() >> mapping mapping.getIdentity() >> null when: - binder.bindNaturalIdentifier(mapping, rootClass) + binder.bindNaturalIdentifier(persistentEntity, rootClass) then: 0 * uniqueNameGenerator._ diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ClassPropertiesBinderSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ClassPropertiesBinderSpec.groovy index 5f5be503ab..cda787c22b 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ClassPropertiesBinderSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ClassPropertiesBinderSpec.groovy @@ -55,6 +55,6 @@ class ClassPropertiesBinderSpec extends HibernateGormDatastoreSpec { persistentClass.getProperty("hibernateProp1") == hibernateProp1 persistentClass.getProperty("hibernateProp2") == hibernateProp2 - 1 * naturalIdentifierBinder.bindNaturalIdentifier(mapping, persistentClass) + 1 * naturalIdentifierBinder.bindNaturalIdentifier(domainClass, persistentClass) } }
