You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@grails.apache.org by bo...@apache.org on 2026/03/10 04:34:42 UTC
(grails-core) 04/05: hibernate7: Modify NaturalIdentifierBinder to accept GrailsHibernatePersistentEntity instead of Mapping for better consistency with other binders.
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 <wb...@mac.com>
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)
}
}