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 ef37f2a428a9cd16faf411e060ba68e084aba4c4
Author: Walter Duque de Estrada <[email protected]>
AuthorDate: Mon Feb 16 01:18:52 2026 -0600

    Refactor OneToOneBinder to internally manage OneToOne instantiation
    
    - Add MetadataBuildingContext dependency to OneToOneBinder.
    - Refactor bindOneToOne to create and return OneToOne instances.
    - Update ComponentBinder and GrailsPropertyBinder to use the updated 
signature.
    - Synchronize all relevant test specifications (OneToOneBinderSpec, 
ComponentBinderSpec, GrailsPropertyBinderSpec, etc.) with the new binder 
constructors and method signatures.
---
 .../grails/orm/hibernate/cfg/GrailsDomainBinder.java   |  2 +-
 .../cfg/domainbinding/binder/ComponentBinder.java      |  3 +--
 .../cfg/domainbinding/binder/GrailsPropertyBinder.java |  3 +--
 .../cfg/domainbinding/binder/OneToOneBinder.java       | 18 +++++++++++++-----
 .../cfg/domainbinding/CollectionBinderSpec.groovy      |  2 +-
 .../CollectionSecondPassBinderSpec.groovy              |  2 +-
 .../cfg/domainbinding/ComponentBinderSpec.groovy       |  3 ++-
 .../cfg/domainbinding/GrailsPropertyBinderSpec.groovy  |  2 +-
 .../cfg/domainbinding/ListSecondPassBinderSpec.groovy  |  2 +-
 .../cfg/domainbinding/MapSecondPassBinderSpec.groovy   |  2 +-
 .../cfg/domainbinding/OneToOneBinderSpec.groovy        | 12 +++++-------
 11 files changed, 28 insertions(+), 23 deletions(-)

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 e733e1c43a..d4b6f2446f 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
@@ -170,7 +170,7 @@ public class GrailsDomainBinder
                 backticksRemover,
                 simpleValueBinder
         );
-        OneToOneBinder oneToOneBinder = new OneToOneBinder(namingStrategy, 
simpleValueBinder);
+        OneToOneBinder oneToOneBinder = new 
OneToOneBinder(metadataBuildingContext, namingStrategy, simpleValueBinder);
         ManyToOneBinder manyToOneBinder = new 
ManyToOneBinder(metadataBuildingContext, namingStrategy, simpleValueBinder, new 
ManyToOneValuesBinder(), compositeIdentifierToManyToOneBinder, 
simpleValueColumnFetcher);
 
         CollectionBinder collectionBinder = new CollectionBinder(
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ComponentBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ComponentBinder.java
index db977a1ffd..936c645744 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ComponentBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ComponentBinder.java
@@ -125,8 +125,7 @@ public class ComponentBinder {
                 LOG.debug("[GrailsDomainBinder] Binding property [" + 
currentGrailsProp.getName() + "] as OneToOne");
 
             if (association.canBindOneToOneWithSingleColumnAndForeignKey()) {
-                value = new OneToOne(metadataBuildingContext, table, 
persistentClass);
-                
oneToOneBinder.bindOneToOne((org.grails.datastore.mapping.model.types.OneToOne) 
currentGrailsProp, (OneToOne) value, path);
+                value = 
oneToOneBinder.bindOneToOne((org.grails.datastore.mapping.model.types.OneToOne) 
currentGrailsProp, persistentClass, table, path);
             }
             else {
                 value = manyToOneBinder.bindManyToOne((Association) 
currentGrailsProp, table, path);
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/GrailsPropertyBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/GrailsPropertyBinder.java
index f14ce2656c..6150f1074b 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/GrailsPropertyBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/GrailsPropertyBinder.java
@@ -110,8 +110,7 @@ public class GrailsPropertyBinder {
             enumTypeBinder.bindEnumType(currentGrailsProp, 
currentGrailsProp.getType(), simpleValue, columnName);
         }
         else if (currentGrailsProp.isHibernateOneToOne()) {
-            value = new OneToOne(metadataBuildingContext, table, 
persistentClass);
-            
oneToOneBinder.bindOneToOne((org.grails.datastore.mapping.model.types.OneToOne)currentGrailsProp,
 (OneToOne)value, EMPTY_PATH);
+            value = 
oneToOneBinder.bindOneToOne((org.grails.datastore.mapping.model.types.OneToOne)currentGrailsProp,
 persistentClass, table, EMPTY_PATH);
         } else if(currentGrailsProp.isHibernateManyToOne()) {
             value = 
manyToOneBinder.bindManyToOne((Association)currentGrailsProp, table, 
EMPTY_PATH);
         }
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/OneToOneBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/OneToOneBinder.java
index bc1109d7e6..95ec4b8ec0 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/OneToOneBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/OneToOneBinder.java
@@ -1,8 +1,10 @@
 package org.grails.orm.hibernate.cfg.domainbinding.binder;
 
 import org.hibernate.FetchMode;
+import org.hibernate.boot.spi.MetadataBuildingContext;
 import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
 import org.hibernate.mapping.OneToOne;
+import org.hibernate.mapping.PersistentClass;
 import org.hibernate.type.ForeignKeyDirection;
 
 import org.grails.datastore.mapping.model.types.Association;
@@ -12,20 +14,25 @@ import org.grails.orm.hibernate.cfg.PropertyConfig;
 
 public class OneToOneBinder {
 
+    private final MetadataBuildingContext metadataBuildingContext;
     private final PersistentEntityNamingStrategy namingStrategy;
     private final SimpleValueBinder simpleValueBinder;
 
-    public OneToOneBinder(PersistentEntityNamingStrategy namingStrategy, 
SimpleValueBinder simpleValueBinder) {
+    public OneToOneBinder(MetadataBuildingContext metadataBuildingContext, 
PersistentEntityNamingStrategy namingStrategy, SimpleValueBinder 
simpleValueBinder) {
+        this.metadataBuildingContext = metadataBuildingContext;
         this.namingStrategy = namingStrategy;
         this.simpleValueBinder = simpleValueBinder;
     }
 
-    public OneToOneBinder(PersistentEntityNamingStrategy namingStrategy, 
JdbcEnvironment jdbcEnvironment) {
-        this(namingStrategy, new SimpleValueBinder(namingStrategy, 
jdbcEnvironment));
+    public OneToOneBinder(MetadataBuildingContext metadataBuildingContext, 
PersistentEntityNamingStrategy namingStrategy, JdbcEnvironment jdbcEnvironment) 
{
+        this(metadataBuildingContext, namingStrategy, new 
SimpleValueBinder(namingStrategy, jdbcEnvironment));
     }
 
-    public void bindOneToOne(final 
org.grails.datastore.mapping.model.types.OneToOne property, OneToOne oneToOne,
-                              String path) {
+    public OneToOne bindOneToOne(final 
org.grails.datastore.mapping.model.types.OneToOne property
+            , PersistentClass owner
+            , org.hibernate.mapping.Table table
+            , String path) {
+        OneToOne oneToOne = new OneToOne(metadataBuildingContext, table, 
owner);
         PropertyConfig config = ((GrailsHibernatePersistentProperty) 
property).getMappedForm();
         final Association otherSide = property.getInverseSide();
 
@@ -53,5 +60,6 @@ public class OneToOneBinder {
         else {
             oneToOne.setReferencedPropertyName(otherSide.getName());
         }
+        return oneToOne;
     }
 }
\ No newline at end of file
diff --git 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/CollectionBinderSpec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/CollectionBinderSpec.groovy
index d687080e50..5420cf8df1 100644
--- 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/CollectionBinderSpec.groovy
+++ 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/CollectionBinderSpec.groovy
@@ -65,7 +65,7 @@ class CollectionBinderSpec extends HibernateGormDatastoreSpec 
{
                 backticksRemover,
                 simpleValueBinder
         )
-        OneToOneBinder oneToOneBinder = new OneToOneBinder(namingStrategy, 
simpleValueBinder)
+        OneToOneBinder oneToOneBinder = new 
OneToOneBinder(metadataBuildingContext, namingStrategy, simpleValueBinder)
         ManyToOneBinder manyToOneBinder = new 
ManyToOneBinder(metadataBuildingContext, namingStrategy, simpleValueBinder, new 
ManyToOneValuesBinder(), compositeIdentifierToManyToOneBinder, 
simpleValueColumnFetcher)
 
         CollectionBinder collectionBinder = new CollectionBinder(
diff --git 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/CollectionSecondPassBinderSpec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/CollectionSecondPassBinderSpec.groovy
index 464e2abb0a..3106e7eba0 100644
--- 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/CollectionSecondPassBinderSpec.groovy
+++ 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/CollectionSecondPassBinderSpec.groovy
@@ -64,7 +64,7 @@ class CollectionSecondPassBinderSpec extends 
HibernateGormDatastoreSpec {
                 backticksRemover,
                 simpleValueBinder
         )
-        OneToOneBinder oneToOneBinder = new OneToOneBinder(namingStrategy, 
simpleValueBinder)
+        OneToOneBinder oneToOneBinder = new 
OneToOneBinder(metadataBuildingContext, namingStrategy, simpleValueBinder)
         ManyToOneBinder manyToOneBinder = new 
ManyToOneBinder(metadataBuildingContext, namingStrategy, simpleValueBinder, new 
ManyToOneValuesBinder(), compositeIdentifierToManyToOneBinder, 
simpleValueColumnFetcher)
 
         CollectionBinder collectionBinder = new CollectionBinder(
diff --git 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ComponentBinderSpec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ComponentBinderSpec.groovy
index 6b3e427944..2fb24c3bb7 100644
--- 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ComponentBinderSpec.groovy
+++ 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ComponentBinderSpec.groovy
@@ -219,12 +219,13 @@ class ComponentBinderSpec extends 
HibernateGormDatastoreSpec {
         
((Association)currentGrailsProp).canBindOneToOneWithSingleColumnAndForeignKey() 
>> true
         setupProperty(currentGrailsProp, "detail", mapping, ownerEntity)
         setupProperty(componentProperty, "address", mapping, ownerEntity)
+        def hibernateOneToOne = new HibernateOneToOne(metadataBuildingContext, 
table, root)
         
         when:
         binder.bindComponentProperty(component, componentProperty, 
currentGrailsProp, root, "address", table, mappings)
 
         then:
-        1 * oneToOneBinder.bindOneToOne(currentGrailsProp, _ as 
HibernateOneToOne, "address")
+        1 * oneToOneBinder.bindOneToOne(currentGrailsProp, root, table, 
"address") >> hibernateOneToOne
         0 * componentUpdater.updateComponent(_, _, _, _)
     }
 
diff --git 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/GrailsPropertyBinderSpec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/GrailsPropertyBinderSpec.groovy
index 55f3312fde..11a16fab9f 100644
--- 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/GrailsPropertyBinderSpec.groovy
+++ 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/GrailsPropertyBinderSpec.groovy
@@ -69,7 +69,7 @@ class GrailsPropertyBinderSpec extends 
HibernateGormDatastoreSpec {
                 backticksRemover,
                 simpleValueBinder
         )
-        OneToOneBinder oneToOneBinder = new OneToOneBinder(namingStrategy, 
simpleValueBinder)
+        OneToOneBinder oneToOneBinder = new 
OneToOneBinder(metadataBuildingContext, namingStrategy, simpleValueBinder)
         ManyToOneBinder manyToOneBinder = new 
ManyToOneBinder(metadataBuildingContext, namingStrategy, simpleValueBinder, new 
ManyToOneValuesBinder(), compositeIdentifierToManyToOneBinder, 
simpleValueColumnFetcher)
 
         CollectionBinder collectionBinder = new CollectionBinder(
diff --git 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ListSecondPassBinderSpec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ListSecondPassBinderSpec.groovy
index 621fcaff53..3a74ef261a 100644
--- 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ListSecondPassBinderSpec.groovy
+++ 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ListSecondPassBinderSpec.groovy
@@ -64,7 +64,7 @@ class ListSecondPassBinderSpec extends 
HibernateGormDatastoreSpec {
                 backticksRemover,
                 simpleValueBinder
         )
-        OneToOneBinder oneToOneBinder = new OneToOneBinder(namingStrategy, 
simpleValueBinder)
+        OneToOneBinder oneToOneBinder = new 
OneToOneBinder(metadataBuildingContext, namingStrategy, simpleValueBinder)
         ManyToOneBinder manyToOneBinder = new 
ManyToOneBinder(metadataBuildingContext, namingStrategy, simpleValueBinder, new 
ManyToOneValuesBinder(), compositeIdentifierToManyToOneBinder, 
simpleValueColumnFetcher)
 
         CollectionBinder collectionBinder = new CollectionBinder(
diff --git 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/MapSecondPassBinderSpec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/MapSecondPassBinderSpec.groovy
index e1c26709f6..d703278360 100644
--- 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/MapSecondPassBinderSpec.groovy
+++ 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/MapSecondPassBinderSpec.groovy
@@ -64,7 +64,7 @@ class MapSecondPassBinderSpec extends 
HibernateGormDatastoreSpec {
                 backticksRemover,
                 simpleValueBinder
         )
-        OneToOneBinder oneToOneBinder = new OneToOneBinder(namingStrategy, 
simpleValueBinder)
+        OneToOneBinder oneToOneBinder = new 
OneToOneBinder(metadataBuildingContext, namingStrategy, simpleValueBinder)
         ManyToOneBinder manyToOneBinder = new 
ManyToOneBinder(metadataBuildingContext, namingStrategy, simpleValueBinder, new 
ManyToOneValuesBinder(), compositeIdentifierToManyToOneBinder, 
simpleValueColumnFetcher)
 
         CollectionBinder collectionBinder = new CollectionBinder(
diff --git 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/OneToOneBinderSpec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/OneToOneBinderSpec.groovy
index 036a05ef59..1ec1f899f5 100644
--- 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/OneToOneBinderSpec.groovy
+++ 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/OneToOneBinderSpec.groovy
@@ -22,14 +22,13 @@ class OneToOneBinderSpec extends HibernateGormDatastoreSpec 
{
     SimpleValueBinder mockSimpleValueBinder = Mock(SimpleValueBinder)
 
     def setup() {
-        binder = new 
OneToOneBinder(getGrailsDomainBinder().getNamingStrategy(), 
mockSimpleValueBinder)
+        binder = new 
OneToOneBinder(getGrailsDomainBinder().getMetadataBuildingContext(), 
getGrailsDomainBinder().getNamingStrategy(), mockSimpleValueBinder)
     }
 
     def "should bind one-to-one mapping with defaults"() {
         given:
         def metadataBuildingContext = 
getGrailsDomainBinder().getMetadataBuildingContext()
         def ownerRoot = new RootClass(metadataBuildingContext)
-        def hibernateOneToOne = new HibernateOneToOne(metadataBuildingContext, 
null, ownerRoot)
         
         def gormOneToOne = Mock(GormOneToOne, additionalInterfaces: 
[GrailsHibernatePersistentProperty])
         def otherSide = Mock(GormOneToOne)
@@ -49,9 +48,10 @@ class OneToOneBinderSpec extends HibernateGormDatastoreSpec {
         ((GrailsHibernatePersistentProperty)gormOneToOne).getMappedForm() >> 
new PropertyConfig()
 
         when:
-        binder.bindOneToOne(gormOneToOne as GormOneToOne, hibernateOneToOne, 
"")
+        def hibernateOneToOne = binder.bindOneToOne(gormOneToOne as 
GormOneToOne, ownerRoot, null, "")
 
         then:
+        hibernateOneToOne instanceof HibernateOneToOne
         !hibernateOneToOne.isConstrained()
         hibernateOneToOne.getForeignKeyType() == ForeignKeyDirection.TO_PARENT
         hibernateOneToOne.isAlternateUniqueKey()
@@ -65,7 +65,6 @@ class OneToOneBinderSpec extends HibernateGormDatastoreSpec {
         given:
         def metadataBuildingContext = 
getGrailsDomainBinder().getMetadataBuildingContext()
         def ownerRoot = new RootClass(metadataBuildingContext)
-        def hibernateOneToOne = new HibernateOneToOne(metadataBuildingContext, 
null, ownerRoot)
         
         def gormOneToOne = Mock(GormOneToOne, additionalInterfaces: 
[GrailsHibernatePersistentProperty])
         def otherSide = Mock(GormOneToOne)
@@ -85,7 +84,7 @@ class OneToOneBinderSpec extends HibernateGormDatastoreSpec {
         ((GrailsHibernatePersistentProperty)gormOneToOne).getMappedForm() >> 
propertyConfig
 
         when:
-        binder.bindOneToOne(gormOneToOne as GormOneToOne, hibernateOneToOne, 
"")
+        def hibernateOneToOne = binder.bindOneToOne(gormOneToOne as 
GormOneToOne, ownerRoot, null, "")
 
         then:
         hibernateOneToOne.isConstrained()
@@ -97,7 +96,6 @@ class OneToOneBinderSpec extends HibernateGormDatastoreSpec {
         given:
         def metadataBuildingContext = 
getGrailsDomainBinder().getMetadataBuildingContext()
         def ownerRoot = new RootClass(metadataBuildingContext)
-        def hibernateOneToOne = new HibernateOneToOne(metadataBuildingContext, 
null, ownerRoot)
         
         def gormOneToOne = Mock(GormOneToOne, additionalInterfaces: 
[GrailsHibernatePersistentProperty])
         def otherSide = Mock(GormOneToOne)
@@ -115,7 +113,7 @@ class OneToOneBinderSpec extends HibernateGormDatastoreSpec 
{
         ((GrailsHibernatePersistentProperty)gormOneToOne).getMappedForm() >> 
propertyConfig
 
         when:
-        binder.bindOneToOne(gormOneToOne as GormOneToOne, hibernateOneToOne, 
"")
+        def hibernateOneToOne = binder.bindOneToOne(gormOneToOne as 
GormOneToOne, ownerRoot, null, "")
 
         then:
         hibernateOneToOne.getFetchMode() == FetchMode.JOIN

Reply via email to