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 9153fed8ad837c89ff611eaf52f5676070bb7572
Author: Walter Duque de Estrada <[email protected]>
AuthorDate: Mon Mar 2 13:42:34 2026 -0600

    refactor: replace isCompositeIdentifier with Optional<CompositeIdentity> in 
ManyToOneBinder
---
 .../binder/ForeignKeyOneToOneBinder.java           |  6 ++--
 .../cfg/domainbinding/binder/ManyToOneBinder.java  | 38 +++++++++-------------
 .../ForeignKeyOneToOneBinderSpec.groovy            |  3 ++
 .../cfg/domainbinding/ManyToOneBinderSpec.groovy   |  5 ++-
 4 files changed, 24 insertions(+), 28 deletions(-)

diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ForeignKeyOneToOneBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ForeignKeyOneToOneBinder.java
index ef45844a18..5e1163f6ba 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ForeignKeyOneToOneBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ForeignKeyOneToOneBinder.java
@@ -51,10 +51,8 @@ public class ForeignKeyOneToOneBinder {
   public ManyToOne bind(
       HibernateOneToOneProperty property, org.hibernate.mapping.Table table, 
String path) {
     GrailsHibernatePersistentEntity refDomainClass = 
property.getHibernateAssociatedEntity();
-    boolean isComposite = 
ManyToOneBinder.isCompositeIdentifier(refDomainClass);
-    ManyToOne manyToOne =
-        manyToOneBinder.doBind(property, refDomainClass, isComposite, table, 
path);
-    if (!isComposite) {
+    ManyToOne manyToOne = manyToOneBinder.doBind(property, refDomainClass, 
table, path);
+    if (refDomainClass.getHibernateCompositeIdentity().isEmpty()) {
       bindUniqueKey(property, manyToOne);
     }
     return manyToOne;
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ManyToOneBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ManyToOneBinder.java
index 7e256ff33f..ab3dbba1b5 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ManyToOneBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ManyToOneBinder.java
@@ -20,12 +20,12 @@ package org.grails.orm.hibernate.cfg.domainbinding.binder;
 
 import static 
org.grails.orm.hibernate.cfg.domainbinding.binder.GrailsDomainBinder.FOREIGN_KEY_SUFFIX;
 
+import java.util.Optional;
 import org.grails.orm.hibernate.cfg.ColumnConfig;
 import org.grails.orm.hibernate.cfg.CompositeIdentity;
 import org.grails.orm.hibernate.cfg.JoinTable;
 import org.grails.orm.hibernate.cfg.Mapping;
 import org.grails.orm.hibernate.cfg.PersistentEntityNamingStrategy;
-import org.grails.orm.hibernate.cfg.PropertyConfig;
 import 
org.grails.orm.hibernate.cfg.domainbinding.hibernate.GrailsHibernatePersistentEntity;
 import 
org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateAssociation;
 import 
org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateManyToManyProperty;
@@ -72,57 +72,49 @@ public class ManyToOneBinder {
   /** Binds a many-to-one association. */
   public ManyToOne bindManyToOne(
       HibernateManyToOneProperty property, org.hibernate.mapping.Table table, 
String path) {
-    GrailsHibernatePersistentEntity refDomainClass = 
property.getHibernateAssociatedEntity();
-    return doBind(property, refDomainClass, 
isCompositeIdentifier(refDomainClass), table, path);
+    return doBind(property, property.getHibernateAssociatedEntity(), table, 
path);
   }
 
   /** Binds the inverse side of a many-to-many association as a collection 
element. */
   public ManyToOne bindManyToOne(
       HibernateManyToManyProperty property, org.hibernate.mapping.Table table, 
String path) {
     GrailsHibernatePersistentEntity refDomainClass = 
property.getHibernateOwner();
-    boolean isComposite = isCompositeIdentifier(refDomainClass);
-    if (!isComposite && property.isCircular()) {
-      prepareCircularManyToMany(property, refDomainClass.getMappedForm());
+    Optional<CompositeIdentity> compositeId = 
refDomainClass.getHibernateCompositeIdentity();
+    if (compositeId.isEmpty() && property.isCircular()) {
+      prepareCircularManyToMany(property);
     }
-    return doBind(property, refDomainClass, isComposite, table, path);
-  }
-
-  static boolean isCompositeIdentifier(GrailsHibernatePersistentEntity entity) 
{
-    Mapping mapping = entity.getMappedForm();
-    return mapping != null && mapping.hasCompositeIdentifier();
+    return doBind(property, refDomainClass, table, path);
   }
 
   ManyToOne doBind(
       HibernateAssociation property,
       GrailsHibernatePersistentEntity refDomainClass,
-      boolean isComposite,
       org.hibernate.mapping.Table table,
       String path) {
     ManyToOne manyToOne = new ManyToOne(metadataBuildingContext, table);
     manyToOneValuesBinder.bindManyToOneValues(property, manyToOne);
-    if (isComposite) {
-      Mapping mapping = refDomainClass.getMappedForm();
-      CompositeIdentity ci = (CompositeIdentity) mapping.getIdentity();
+    Optional<CompositeIdentity> compositeId = 
refDomainClass.getHibernateCompositeIdentity();
+    if (compositeId.isPresent()) {
       compositeIdentifierToManyToOneBinder.bindCompositeIdentifierToManyToOne(
-          property, manyToOne, ci, refDomainClass, path);
+          property, manyToOne, compositeId.get(), refDomainClass, path);
     } else {
       simpleValueBinder.bindSimpleValue(property, null, manyToOne, path);
     }
     return manyToOne;
   }
 
-  private void prepareCircularManyToMany(HibernateManyToManyProperty property, 
Mapping mapping) {
-    PropertyConfig pc = property.getMappedForm();
-    if (mapping != null && pc.getColumns().isEmpty()) {
-      mapping.getColumns().put(property.getName(), pc);
+  private void prepareCircularManyToMany(HibernateManyToManyProperty property) 
{
+    Mapping ownerMapping = property.getHibernateOwner().getMappedForm();
+    if (ownerMapping != null && 
!ownerMapping.getColumns().containsKey(property.getName())) {
+      ownerMapping.getColumns().put(property.getName(), 
property.getMappedForm());
     }
-    if (!pc.hasJoinKeyMapping()) {
+    if (!property.getMappedForm().hasJoinKeyMapping()) {
       JoinTable jt = new JoinTable();
       ColumnConfig columnConfig = new ColumnConfig();
       columnConfig.setName(
           namingStrategy.resolveColumnName(property.getName()) + 
FOREIGN_KEY_SUFFIX);
       jt.setKey(columnConfig);
-      pc.setJoinTable(jt);
+      property.getMappedForm().setJoinTable(jt);
     }
   }
 }
diff --git 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ForeignKeyOneToOneBinderSpec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ForeignKeyOneToOneBinderSpec.groovy
index bfcadc3367..c016a3e22c 100644
--- 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ForeignKeyOneToOneBinderSpec.groovy
+++ 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ForeignKeyOneToOneBinderSpec.groovy
@@ -22,6 +22,7 @@ import grails.gorm.specs.HibernateGormDatastoreSpec
 import org.grails.datastore.mapping.model.MappingContext
 import org.grails.datastore.mapping.model.PersistentEntity
 import org.grails.orm.hibernate.cfg.Mapping
+import java.util.Optional
 import org.grails.orm.hibernate.cfg.PersistentEntityNamingStrategy
 import org.grails.orm.hibernate.cfg.PropertyConfig
 import 
org.grails.orm.hibernate.cfg.domainbinding.hibernate.GrailsHibernatePersistentEntity
@@ -58,6 +59,7 @@ class ForeignKeyOneToOneBinderSpec extends 
HibernateGormDatastoreSpec {
         def mapping = new Mapping()
         def refDomainClass = Mock(GrailsHibernatePersistentEntity) {
             getMappedForm() >> mapping
+            getHibernateCompositeIdentity() >> Optional.empty()
         }
         def propertyConfig = Mock(PropertyConfig)
         def column = new Column('test')
@@ -111,6 +113,7 @@ class ForeignKeyOneToOneBinderSpec extends 
HibernateGormDatastoreSpec {
         def mapping = new Mapping()
         def refDomainClass = Mock(GrailsHibernatePersistentEntity) {
             getMappedForm() >> mapping
+            getHibernateCompositeIdentity() >> Optional.empty()
         }
         def propertyConfig = new PropertyConfig()
 
diff --git 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ManyToOneBinderSpec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ManyToOneBinderSpec.groovy
index 15a7bbae11..2d98f6d595 100644
--- 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ManyToOneBinderSpec.groovy
+++ 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ManyToOneBinderSpec.groovy
@@ -5,6 +5,7 @@ import org.grails.orm.hibernate.cfg.CompositeIdentity
 import 
org.grails.orm.hibernate.cfg.domainbinding.hibernate.GrailsHibernatePersistentEntity
 import 
org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernatePersistentProperty
 import org.grails.orm.hibernate.cfg.Mapping
+import java.util.Optional
 import org.grails.orm.hibernate.cfg.PersistentEntityNamingStrategy
 import org.grails.orm.hibernate.cfg.PropertyConfig
 import 
org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateManyToManyProperty
@@ -33,14 +34,15 @@ class ManyToOneBinderSpec extends 
HibernateGormDatastoreSpec {
         def association = Mock(HibernateManyToOneProperty)
         def path = "/test"
         def mapping = new Mapping()
+        mapping.setIdentity(hasCompositeId ? new CompositeIdentity() : null)
         def refDomainClass = Mock(GrailsHibernatePersistentEntity) {
             getMappedForm() >> mapping
+            getHibernateCompositeIdentity() >> 
Optional.ofNullable(mapping.hasCompositeIdentifier() ? (CompositeIdentity) 
mapping.getIdentity() : null)
         }
         def propertyConfig = new PropertyConfig()
 
         association.getHibernateAssociatedEntity() >> refDomainClass
         association.getMappedForm() >> propertyConfig
-        mapping.setIdentity(hasCompositeId ? new CompositeIdentity() : null)
 
         when:
         def result = binder.bindManyToOne(association, null, path)
@@ -71,6 +73,7 @@ class ManyToOneBinderSpec extends HibernateGormDatastoreSpec {
         mapping.setColumns(new HashMap<String, PropertyConfig>())
         def ownerEntity = Mock(GrailsHibernatePersistentEntity) {
             getMappedForm() >> mapping
+            getHibernateCompositeIdentity() >> Optional.empty()
         }
         def propertyConfig = new PropertyConfig()
 

Reply via email to