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
