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/02/17 18:42:08 UTC
(grails-core) 09/26: Refactor OneToOneBinder to internally manage OneToOne instantiation
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 <wb...@mac.com>
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