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 0ac03dca75430f030a310d443ca5bd2c0137f300 Author: Walter Duque de Estrada <[email protected]> AuthorDate: Sun Mar 1 19:12:13 2026 -0600 fix: share single InFlightMetadataCollector across binders in test specs getBinders() now accepts an optional collector parameter (defaulting to getCollector()) so callers can pass a pre-created collector, ensuring second-pass registrations made during bindRoot are visible to the same collector used in the test body. CollectionBinderSpec, ListSecondPassBinderSpec and MapSecondPassBinderSpec received the same fix. Co-authored-by: Copilot <[email protected]> --- .../cfg/domainbinding/binder/ClassBinder.java | 10 +++++--- .../cfg/domainbinding/binder/CollectionBinder.java | 15 ++++++------ .../domainbinding/binder/GrailsDomainBinder.java | 20 +++++++++------- .../domainbinding/binder/GrailsPropertyBinder.java | 2 +- .../domainbinding/binder/JoinedSubClassBinder.java | 16 ++++++------- .../cfg/domainbinding/binder/RootBinder.java | 15 ++++++------ .../RootPersistentClassCommonValuesBinder.java | 10 ++++---- .../binder/SingleTableSubclassBinder.java | 2 +- .../cfg/domainbinding/binder/SubClassBinder.java | 12 +++++----- .../binder/SubclassMappingBinder.java | 4 ++-- .../domainbinding/binder/UnionSubclassBinder.java | 11 +++++---- .../secondpass/CollectionSecondPassBinder.java | 2 +- .../domainbinding/secondpass/ListSecondPass.java | 2 +- .../secondpass/ListSecondPassBinder.java | 6 +++-- .../secondpass/UnidirectionalOneToManyBinder.java | 9 +++---- .../cfg/domainbinding/ClassBinderSpec.groovy | 12 +++++----- .../cfg/domainbinding/CollectionBinderSpec.groovy | 22 +++++++++-------- .../domainbinding/GrailsPropertyBinderSpec.groovy | 28 +++++++++++----------- .../binder/JoinedSubClassBinderSpec.groovy | 7 +++--- .../cfg/domainbinding/binder/RootBinderSpec.groovy | 27 +++++++++++---------- ...ootPersistentClassCommonValuesBinderSpec.groovy | 11 +++++---- .../binder/SingleTableSubclassBinderSpec.groovy | 4 +++- .../domainbinding/binder/SubClassBinderSpec.groovy | 19 ++++++++------- .../binder/SubclassMappingBinderSpec.groovy | 4 ++-- .../binder/UnionSubclassBinderSpec.groovy | 7 +++--- .../CollectionSecondPassBinderSpec.groovy | 2 +- .../secondpass/ListSecondPassBinderSpec.groovy | 22 +++++++++-------- .../secondpass/MapSecondPassBinderSpec.groovy | 22 +++++++++-------- .../UnidirectionalOneToManyBinderSpec.groovy | 6 ++--- 29 files changed, 180 insertions(+), 149 deletions(-) diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ClassBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ClassBinder.java index b21de08b94..2938476f65 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ClassBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ClassBinder.java @@ -29,18 +29,22 @@ import org.hibernate.mapping.PersistentClass; /** The class binder class. */ public class ClassBinder { + private final InFlightMetadataCollector collector; + + public ClassBinder(@Nonnull InFlightMetadataCollector collector) { + this.collector = collector; + } + /** * Binds the specified persistant class to the runtime model based on the properties defined in * the domain class * * @param persistentEntity The Grails domain class * @param persistentClass The persistant class - * @param collector Existing collector */ public void bindClass( @Nonnull GrailsHibernatePersistentEntity persistentEntity, - PersistentClass persistentClass, - @Nonnull InFlightMetadataCollector collector) { + PersistentClass persistentClass) { persistentClass.setLazy(true); var entityName = persistentEntity.getName(); persistentClass.setEntityName(entityName); diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/CollectionBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/CollectionBinder.java index b540fd3f24..319d9b12c0 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/CollectionBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/CollectionBinder.java @@ -69,6 +69,7 @@ public class CollectionBinder { private final ListSecondPassBinder listSecondPassBinder; private final CollectionSecondPassBinder collectionSecondPassBinder; private final MapSecondPassBinder mapSecondPassBinder; + private final InFlightMetadataCollector mappings; /** Creates a new {@link CollectionBinder} instance. */ public CollectionBinder( @@ -79,10 +80,12 @@ public class CollectionBinder { ManyToOneBinder manyToOneBinder, CompositeIdentifierToManyToOneBinder compositeIdentifierToManyToOneBinder, SimpleValueColumnFetcher simpleValueColumnFetcher, - CollectionHolder collectionHolder) { + CollectionHolder collectionHolder, + InFlightMetadataCollector mappings) { this.metadataBuildingContext = metadataBuildingContext; this.namingStrategy = namingStrategy; this.collectionHolder = collectionHolder; + this.mappings = mappings; GrailsPropertyResolver grailsPropertyResolver = new GrailsPropertyResolver(); CollectionForPropertyConfigBinder collectionForPropertyConfigBinder = new CollectionForPropertyConfigBinder(); @@ -107,7 +110,7 @@ public class CollectionBinder { new CollectionKeyColumnUpdater(), new BidirectionalOneToManyLinker(grailsPropertyResolver), new DependentKeyValueBinder(simpleValueBinder, compositeIdentifierToManyToOneBinder), - new UnidirectionalOneToManyBinder(collectionWithJoinTableBinder), + new UnidirectionalOneToManyBinder(collectionWithJoinTableBinder, mappings), collectionWithJoinTableBinder, collectionForPropertyConfigBinder, new DefaultColumnNameFetcher(namingStrategy), @@ -117,7 +120,8 @@ public class CollectionBinder { metadataBuildingContext, namingStrategy, collectionSecondPassBinder, - simpleValueColumnBinder); + simpleValueColumnBinder, + mappings); this.mapSecondPassBinder = new MapSecondPassBinder( metadataBuildingContext, @@ -133,14 +137,12 @@ public class CollectionBinder { * * @param property The GrailsDomainClassProperty instance * @param owner The owning persistent class - * @param mappings The Hibernate mappings instance * @param path The property path * @return the result */ public Collection bindCollection( HibernateToManyProperty property, PersistentClass owner, - @Nonnull InFlightMetadataCollector mappings, String path) { CollectionType collectionType = collectionHolder.get(property.getType()); Collection collection = collectionType.create(property, owner); @@ -170,7 +172,7 @@ public class CollectionBinder { collection.setElement(oneToMany); bindOneToMany((HibernateOneToManyProperty) property, oneToMany); } else { - bindCollectionTable(property, mappings, collection, owner.getTable()); + bindCollectionTable(property, collection, owner.getTable()); if (property.isBidirectional()) { if (!property.isOwningSide()) { @@ -214,7 +216,6 @@ public class CollectionBinder { private void bindCollectionTable( HibernateToManyProperty property, - @Nonnull InFlightMetadataCollector mappings, Collection collection, Table ownerTable) { diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/GrailsDomainBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/GrailsDomainBinder.java index cbf3bf98eb..d411b136be 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/GrailsDomainBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/GrailsDomainBinder.java @@ -126,7 +126,7 @@ public class GrailsDomainBinder implements AdditionalMappingContributor, TypeCon EnumTypeBinder enumTypeBinder = new EnumTypeBinder(metadataBuildingContext, columnNameForPropertyAndPathFetcher); PropertyFromValueCreator propertyFromValueCreator = new PropertyFromValueCreator(); - ClassBinder classBinder = new ClassBinder(); + ClassBinder classBinder = new ClassBinder(metadataCollector); SimpleValueColumnFetcher simpleValueColumnFetcher = new SimpleValueColumnFetcher(); CompositeIdentifierToManyToOneBinder compositeIdentifierToManyToOneBinder = new CompositeIdentifierToManyToOneBinder( @@ -154,7 +154,8 @@ public class GrailsDomainBinder implements AdditionalMappingContributor, TypeCon manyToOneBinder, compositeIdentifierToManyToOneBinder, simpleValueColumnFetcher, - collectionHolder); + collectionHolder, + metadataCollector); ComponentUpdater componentUpdater = new ComponentUpdater(propertyFromValueCreator); ComponentBinder componentBinder = new ComponentBinder(metadataBuildingContext, getMappingCacheHolder(), componentUpdater); @@ -197,9 +198,10 @@ public class GrailsDomainBinder implements AdditionalMappingContributor, TypeCon namingStrategy, new SimpleValueColumnBinder(), columnNameForPropertyAndPathFetcher, - classBinder); + classBinder, + metadataCollector); UnionSubclassBinder unionSubclassBinder = - new UnionSubclassBinder(metadataBuildingContext, namingStrategy, classBinder); + new UnionSubclassBinder(metadataBuildingContext, namingStrategy, classBinder, metadataCollector); SingleTableSubclassBinder singleTableSubclassBinder = new SingleTableSubclassBinder(classBinder); @@ -212,7 +214,7 @@ public class GrailsDomainBinder implements AdditionalMappingContributor, TypeCon classPropertiesBinder); SubClassBinder subClassBinder = new SubClassBinder( - mappingCacheHolder, subclassMappingBinder, multiTenantFilterBinder, dataSourceName); + mappingCacheHolder, subclassMappingBinder, multiTenantFilterBinder, dataSourceName, metadataCollector); RootPersistentClassCommonValuesBinder rootPersistentClassCommonValuesBinder = new RootPersistentClassCommonValuesBinder( metadataBuildingContext, @@ -220,7 +222,8 @@ public class GrailsDomainBinder implements AdditionalMappingContributor, TypeCon identityBinder, versionBinder, classBinder, - classPropertiesBinder); + classPropertiesBinder, + metadataCollector); DiscriminatorPropertyBinder discriminatorPropertyBinder = new DiscriminatorPropertyBinder( metadataBuildingContext, @@ -234,13 +237,14 @@ public class GrailsDomainBinder implements AdditionalMappingContributor, TypeCon multiTenantFilterBinder, subClassBinder, rootPersistentClassCommonValuesBinder, - discriminatorPropertyBinder); + discriminatorPropertyBinder, + metadataCollector); hibernateMappingContext.getHibernatePersistentEntities(dataSourceName).stream() .filter(persistentEntity -> persistentEntity.forGrailsDomainMapping(dataSourceName)) .forEach( hibernatePersistentEntity -> - rootBinder.bindRoot(hibernatePersistentEntity, metadataCollector)); + rootBinder.bindRoot(hibernatePersistentEntity)); } /** 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 924ad91188..9bb67de3f4 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 @@ -98,7 +98,7 @@ public class GrailsPropertyBinder { } else if (currentGrailsProp instanceof HibernateToManyProperty toMany && !currentGrailsProp.isSerializableType()) { // HibernateToManyProperty - value = collectionBinder.bindCollection(toMany, persistentClass, mappings, path); + value = collectionBinder.bindCollection(toMany, persistentClass, path); } else if (currentGrailsProp instanceof HibernateEmbeddedProperty embedded) { value = componentBinder.bindComponent(persistentClass, embedded, mappings, path); } else { diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/JoinedSubClassBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/JoinedSubClassBinder.java index 3ea370501a..35830aac15 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/JoinedSubClassBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/JoinedSubClassBinder.java @@ -47,18 +47,21 @@ public class JoinedSubClassBinder { private final SimpleValueColumnBinder simpleValueColumnBinder; private final ColumnNameForPropertyAndPathFetcher columnNameForPropertyAndPathFetcher; private final ClassBinder classBinder; + private final InFlightMetadataCollector mappings; public JoinedSubClassBinder( MetadataBuildingContext metadataBuildingContext, PersistentEntityNamingStrategy namingStrategy, SimpleValueColumnBinder simpleValueColumnBinder, ColumnNameForPropertyAndPathFetcher columnNameForPropertyAndPathFetcher, - ClassBinder classBinder) { + ClassBinder classBinder, + InFlightMetadataCollector mappings) { this.metadataBuildingContext = metadataBuildingContext; this.namingStrategy = namingStrategy; this.simpleValueColumnBinder = simpleValueColumnBinder; this.columnNameForPropertyAndPathFetcher = columnNameForPropertyAndPathFetcher; this.classBinder = classBinder; + this.mappings = mappings; } /** @@ -66,13 +69,11 @@ public class JoinedSubClassBinder { * * @param sub The Grails sub class * @param joinedSubclass The Hibernate Subclass object - * @param mappings The mappings Object */ public void bindJoinedSubClass( GrailsHibernatePersistentEntity sub, - JoinedSubclass joinedSubclass, - InFlightMetadataCollector mappings) { - classBinder.bindClass(sub, joinedSubclass, mappings); + JoinedSubclass joinedSubclass) { + classBinder.bindClass(sub, joinedSubclass); String schemaName = sub.getSchema(mappings); String catalogName = sub.getCatalog(mappings); @@ -81,7 +82,7 @@ public class JoinedSubClassBinder { mappings.addTable( schemaName, catalogName, - getJoinedSubClassTableName(sub, joinedSubclass, null, mappings), + getJoinedSubClassTableName(sub, joinedSubclass, null), null, false, metadataBuildingContext); @@ -111,8 +112,7 @@ public class JoinedSubClassBinder { private String getJoinedSubClassTableName( GrailsHibernatePersistentEntity sub, PersistentClass model, - Table denormalizedSuperTable, - InFlightMetadataCollector mappings) { + Table denormalizedSuperTable) { String logicalTableName = GrailsHibernateUtil.unqualify(model.getEntityName()); String physicalTableName = sub.getTableName(namingStrategy); diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/RootBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/RootBinder.java index 9c4840a514..2f52401cc7 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/RootBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/RootBinder.java @@ -20,9 +20,7 @@ package org.grails.orm.hibernate.cfg.domainbinding.binder; import jakarta.annotation.Nonnull; import java.util.Collection; -import org.grails.orm.hibernate.cfg.Mapping; import org.grails.orm.hibernate.cfg.domainbinding.hibernate.GrailsHibernatePersistentEntity; -import org.grails.orm.hibernate.cfg.domainbinding.util.DefaultColumnNameFetcher; import org.grails.orm.hibernate.cfg.domainbinding.util.MultiTenantFilterBinder; import org.hibernate.boot.spi.InFlightMetadataCollector; import org.hibernate.mapping.RootClass; @@ -40,18 +38,21 @@ public class RootBinder { private final SubClassBinder subClassBinder; private final RootPersistentClassCommonValuesBinder rootPersistentClassCommonValuesBinder; private final DiscriminatorPropertyBinder discriminatorPropertyBinder; + private final InFlightMetadataCollector mappings; public RootBinder( String dataSourceName, MultiTenantFilterBinder multiTenantFilterBinder, SubClassBinder subClassBinder, RootPersistentClassCommonValuesBinder rootPersistentClassCommonValuesBinder, - DiscriminatorPropertyBinder discriminatorPropertyBinder) { + DiscriminatorPropertyBinder discriminatorPropertyBinder, + InFlightMetadataCollector mappings) { this.dataSourceName = dataSourceName; this.multiTenantFilterBinder = multiTenantFilterBinder; this.subClassBinder = subClassBinder; this.rootPersistentClassCommonValuesBinder = rootPersistentClassCommonValuesBinder; this.discriminatorPropertyBinder = discriminatorPropertyBinder; + this.mappings = mappings; } /** @@ -59,11 +60,9 @@ public class RootBinder { * Grails domain class * * @param entity The Grails domain class - * @param mappings The Hibernate Mappings object */ public void bindRoot( - @Nonnull GrailsHibernatePersistentEntity entity, - @Nonnull InFlightMetadataCollector mappings) { + @Nonnull GrailsHibernatePersistentEntity entity) { if (mappings.getEntityBinding(entity.getName()) != null) { LOG.warn("[RootBinder] Class [" + entity.getName() + "] is already mapped, skipping.. "); return; @@ -72,14 +71,14 @@ public class RootBinder { Collection<GrailsHibernatePersistentEntity> children = entity.getChildEntities(dataSourceName); RootClass root = rootPersistentClassCommonValuesBinder.bindRootPersistentClassCommonValues( - entity, children, mappings); + entity, children); if (!children.isEmpty() && entity.isTablePerHierarchy()) { discriminatorPropertyBinder.bindDiscriminatorProperty(root); } // bind the sub classes - children.forEach(sub -> subClassBinder.bindSubClass(sub, root, mappings)); + children.forEach(sub -> subClassBinder.bindSubClass(sub, root)); multiTenantFilterBinder.bind(entity, root); diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/RootPersistentClassCommonValuesBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/RootPersistentClassCommonValuesBinder.java index a10bfaf5aa..4433c496b1 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/RootPersistentClassCommonValuesBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/RootPersistentClassCommonValuesBinder.java @@ -42,6 +42,7 @@ public class RootPersistentClassCommonValuesBinder { private final VersionBinder versionBinder; private final ClassBinder classBinder; private final ClassPropertiesBinder classPropertiesBinder; + private final InFlightMetadataCollector mappings; public RootPersistentClassCommonValuesBinder( MetadataBuildingContext metadataBuildingContext, @@ -49,23 +50,24 @@ public class RootPersistentClassCommonValuesBinder { IdentityBinder identityBinder, VersionBinder versionBinder, ClassBinder classBinder, - ClassPropertiesBinder classPropertiesBinder) { + ClassPropertiesBinder classPropertiesBinder, + InFlightMetadataCollector mappings) { this.metadataBuildingContext = metadataBuildingContext; this.namingStrategy = namingStrategy; this.identityBinder = identityBinder; this.versionBinder = versionBinder; this.classBinder = classBinder; this.classPropertiesBinder = classPropertiesBinder; + this.mappings = mappings; } public RootClass bindRootPersistentClassCommonValues( @Nonnull GrailsHibernatePersistentEntity domainClass, - @Nonnull Collection<GrailsHibernatePersistentEntity> children, - @Nonnull InFlightMetadataCollector mappings) { + @Nonnull Collection<GrailsHibernatePersistentEntity> children) { RootClass root = new RootClass(this.metadataBuildingContext); root.setAbstract(domainClass.isAbstract()); - classBinder.bindClass(domainClass, root, mappings); + classBinder.bindClass(domainClass, root); // get the schema and catalog names from the configuration Mapping gormMapping = domainClass.getMappedForm(); diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SingleTableSubclassBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SingleTableSubclassBinder.java index abb6d76b21..574d99b87f 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SingleTableSubclassBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SingleTableSubclassBinder.java @@ -51,7 +51,7 @@ public class SingleTableSubclassBinder { @Nonnull GrailsHibernatePersistentEntity sub, SingleTableSubclass subClass, @Nonnull InFlightMetadataCollector mappings) { - classBinder.bindClass(sub, subClass, mappings); + classBinder.bindClass(sub, subClass); subClass.setDiscriminatorValue(sub.getDiscriminatorValue()); if (LOG.isDebugEnabled()) { LOG.debug( diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SubClassBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SubClassBinder.java index 1da4593f1c..2a5b3c1495 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SubClassBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SubClassBinder.java @@ -20,7 +20,6 @@ package org.grails.orm.hibernate.cfg.domainbinding.binder; import jakarta.annotation.Nonnull; import java.util.Collection; -import org.grails.orm.hibernate.cfg.Mapping; import org.grails.orm.hibernate.cfg.MappingCacheHolder; import org.grails.orm.hibernate.cfg.domainbinding.hibernate.GrailsHibernatePersistentEntity; import org.grails.orm.hibernate.cfg.domainbinding.util.MultiTenantFilterBinder; @@ -38,16 +37,19 @@ public class SubClassBinder { private final SubclassMappingBinder subclassMappingBinder; private final MultiTenantFilterBinder multiTenantFilterBinder; private final String dataSourceName; + private final InFlightMetadataCollector mappings; public SubClassBinder( MappingCacheHolder mappingCacheHolder, SubclassMappingBinder subclassMappingBinder, MultiTenantFilterBinder multiTenantFilterBinder, - String dataSourceName) { + String dataSourceName, + InFlightMetadataCollector mappings) { this.mappingCacheHolder = mappingCacheHolder; this.subclassMappingBinder = subclassMappingBinder; this.multiTenantFilterBinder = multiTenantFilterBinder; this.dataSourceName = dataSourceName; + this.mappings = mappings; } /** @@ -55,18 +57,16 @@ public class SubClassBinder { * * @param sub The sub domain class instance * @param parent The parent persistent class instance - * @param mappings The mappings instance */ public void bindSubClass( @Nonnull GrailsHibernatePersistentEntity sub, - PersistentClass parent, - @Nonnull InFlightMetadataCollector mappings) { + PersistentClass parent) { mappingCacheHolder.cacheMapping(sub); Subclass subClass = subclassMappingBinder.createSubclassMapping(sub, parent, mappings); parent.addSubclass(subClass); mappings.addEntityBinding(subClass); bindMultiTenantFilter(sub, subClass); - sub.getChildEntities(dataSourceName).forEach(sub1 -> bindSubClass(sub1, subClass, mappings)); + sub.getChildEntities(dataSourceName).forEach(sub1 -> bindSubClass(sub1, subClass)); } private void bindMultiTenantFilter(GrailsHibernatePersistentEntity sub, Subclass subClass) { diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SubclassMappingBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SubclassMappingBinder.java index 755641307a..8a80745b3e 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SubclassMappingBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SubclassMappingBinder.java @@ -61,11 +61,11 @@ public class SubclassMappingBinder { Mapping m = subEntity.getMappedForm(); if (subEntity.isJoinedSubclass()) { var joined = new JoinedSubclass(parent, this.metadataBuildingContext); - joinedSubClassBinder.bindJoinedSubClass(subEntity, joined, mappings); + joinedSubClassBinder.bindJoinedSubClass(subEntity, joined); subClass = joined; } else if (subEntity.isUnionSubclass()) { var union = new UnionSubclass(parent, this.metadataBuildingContext); - unionSubclassBinder.bindUnionSubclass(subEntity, union, mappings); + unionSubclassBinder.bindUnionSubclass(subEntity, union); subClass = union; } else { diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/UnionSubclassBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/UnionSubclassBinder.java index ff03b45b0f..0587e4e1e7 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/UnionSubclassBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/UnionSubclassBinder.java @@ -41,14 +41,17 @@ public class UnionSubclassBinder { private final MetadataBuildingContext metadataBuildingContext; private final PersistentEntityNamingStrategy namingStrategy; private final ClassBinder classBinder; + private final InFlightMetadataCollector mappings; public UnionSubclassBinder( MetadataBuildingContext metadataBuildingContext, PersistentEntityNamingStrategy namingStrategy, - ClassBinder classBinder) { + ClassBinder classBinder, + InFlightMetadataCollector mappings) { this.metadataBuildingContext = metadataBuildingContext; this.namingStrategy = namingStrategy; this.classBinder = classBinder; + this.mappings = mappings; } /** @@ -56,14 +59,12 @@ public class UnionSubclassBinder { * * @param subClass The Grails sub class * @param unionSubclass The Hibernate UnionSubclass object - * @param mappings The mappings Object */ public void bindUnionSubclass( @Nonnull GrailsHibernatePersistentEntity subClass, - UnionSubclass unionSubclass, - @Nonnull InFlightMetadataCollector mappings) + UnionSubclass unionSubclass) throws MappingException { - classBinder.bindClass(subClass, unionSubclass, mappings); + classBinder.bindClass(subClass, unionSubclass); String schema = subClass.getSchema(mappings); String catalog = subClass.getCatalog(mappings); diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/CollectionSecondPassBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/CollectionSecondPassBinder.java index b3d6063fca..2d0f524947 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/CollectionSecondPassBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/CollectionSecondPassBinder.java @@ -170,7 +170,7 @@ public class CollectionSecondPassBinder { } } else if (property.isUnidirectionalOneToMany()) { unidirectionalOneToManyBinder.bind( - (HibernateOneToManyProperty) property, mappings, collection); + (HibernateOneToManyProperty) property, collection); } else if (property.supportsJoinColumnMapping()) { collectionWithJoinTableBinder.bindCollectionWithJoinTable(property, mappings, collection); } diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/ListSecondPass.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/ListSecondPass.java index 5fb6f9b412..edeb426bb7 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/ListSecondPass.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/ListSecondPass.java @@ -51,7 +51,7 @@ public class ListSecondPass @Override public void doSecondPass(Map persistentClasses) throws MappingException { listSecondPassBinder.bindListSecondPass( - property, mappings, persistentClasses, (org.hibernate.mapping.List) collection); + property, persistentClasses, (org.hibernate.mapping.List) collection); createCollectionKeys(collection); } } diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/ListSecondPassBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/ListSecondPassBinder.java index f83c4ea941..9d6cf3d0b1 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/ListSecondPassBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/ListSecondPassBinder.java @@ -51,21 +51,23 @@ public class ListSecondPassBinder { private final CollectionSecondPassBinder collectionSecondPassBinder; private final PersistentEntityNamingStrategy namingStrategy; private final SimpleValueColumnBinder simpleValueColumnBinder; + private final InFlightMetadataCollector mappings; public ListSecondPassBinder( MetadataBuildingContext metadataBuildingContext, PersistentEntityNamingStrategy namingStrategy, CollectionSecondPassBinder collectionSecondPassBinder, - SimpleValueColumnBinder simpleValueColumnBinder) { + SimpleValueColumnBinder simpleValueColumnBinder, + InFlightMetadataCollector mappings) { this.metadataBuildingContext = metadataBuildingContext; this.collectionSecondPassBinder = collectionSecondPassBinder; this.namingStrategy = namingStrategy; this.simpleValueColumnBinder = simpleValueColumnBinder; + this.mappings = mappings; } public void bindListSecondPass( @Nonnull HibernateToManyProperty property, - @Nonnull InFlightMetadataCollector mappings, Map<?, ?> persistentClasses, @Nonnull List list) { diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/UnidirectionalOneToManyBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/UnidirectionalOneToManyBinder.java index 5badf0a454..1e2451e616 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/UnidirectionalOneToManyBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/UnidirectionalOneToManyBinder.java @@ -39,26 +39,27 @@ public class UnidirectionalOneToManyBinder { private static final Logger LOG = LoggerFactory.getLogger(UnidirectionalOneToManyBinder.class); private final CollectionWithJoinTableBinder collectionWithJoinTableBinder; private final BackticksRemover backticksRemover = new BackticksRemover(); + private final InFlightMetadataCollector mappings; public UnidirectionalOneToManyBinder( - CollectionWithJoinTableBinder collectionWithJoinTableBinder) { + CollectionWithJoinTableBinder collectionWithJoinTableBinder, + InFlightMetadataCollector mappings) { this.collectionWithJoinTableBinder = collectionWithJoinTableBinder; + this.mappings = mappings; } public void bind( @Nonnull HibernateOneToManyProperty property, - @Nonnull InFlightMetadataCollector mappings, @Nonnull Collection collection) { if (!property.shouldBindWithForeignKey()) { collectionWithJoinTableBinder.bindCollectionWithJoinTable(property, mappings, collection); } else { - bindUnidirectionalOneToMany(property, mappings, collection); + bindUnidirectionalOneToMany(property, collection); } } private void bindUnidirectionalOneToMany( @Nonnull HibernateOneToManyProperty property, - @Nonnull InFlightMetadataCollector mappings, @Nonnull Collection collection) { Value element = collection.getElement(); element.createForeignKey(); diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ClassBinderSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ClassBinderSpec.groovy index 79258531dd..39d060308f 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ClassBinderSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ClassBinderSpec.groovy @@ -18,9 +18,9 @@ class ClassBinderSpec extends HibernateGormDatastoreSpec { def persistentName = "foo.Book" def persistentEntity = createPersistentEntity(grailsDomainBinder,simpleName, [:], [:]) def root = new RootClass(grailsDomainBinder.metadataBuildingContext); - def binder = new ClassBinder() + def binder = new ClassBinder(collector) - binder.bindClass(persistentEntity,root, collector) + binder.bindClass(persistentEntity,root) then: root.getEntityName() == persistentName root.getJpaEntityName() == simpleName @@ -43,9 +43,9 @@ class ClassBinderSpec extends HibernateGormDatastoreSpec { def persistentName = "foo.Book" def persistentEntity = createPersistentEntity(grailsDomainBinder,simpleName, [:], [autoImport: "true"]) def root = new RootClass(grailsDomainBinder.metadataBuildingContext); - def binder = new ClassBinder() + def binder = new ClassBinder(collector) - binder.bindClass(persistentEntity,root, collector) + binder.bindClass(persistentEntity,root) then: root.getEntityName() == persistentName root.getJpaEntityName() == simpleName @@ -68,9 +68,9 @@ class ClassBinderSpec extends HibernateGormDatastoreSpec { def persistentName = "foo.Book" def persistentEntity = createPersistentEntity(grailsDomainBinder, simpleName, [:], [autoImport: "false"]) def root = new RootClass(grailsDomainBinder.metadataBuildingContext); - def binder = new ClassBinder() + def binder = new ClassBinder(collector) - binder.bindClass(persistentEntity,root, collector) + binder.bindClass(persistentEntity,root) then: root.getEntityName() == persistentName root.getJpaEntityName() == persistentName 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 0da2b5f3d9..fdfbd839c9 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 @@ -51,6 +51,7 @@ import org.grails.orm.hibernate.cfg.domainbinding.binder.SingleTableSubclassBind class CollectionBinderSpec extends HibernateGormDatastoreSpec { protected Map getBinders(GrailsDomainBinder binder) { + def collector = getCollector() MetadataBuildingContext metadataBuildingContext = binder.getMetadataBuildingContext() PersistentEntityNamingStrategy namingStrategy = binder.getNamingStrategy() JdbcEnvironment jdbcEnvironment = binder.getJdbcEnvironment() @@ -82,7 +83,8 @@ class CollectionBinderSpec extends HibernateGormDatastoreSpec { compositeIdentifierToManyToOneBinder, simpleValueColumnFetcher , - collectionHolder + collectionHolder, + getCollector() ) PropertyFromValueCreator propertyFromValueCreator = new PropertyFromValueCreator() ComponentUpdater componentUpdater = new ComponentUpdater(propertyFromValueCreator) @@ -110,18 +112,18 @@ class CollectionBinderSpec extends HibernateGormDatastoreSpec { IdentityBinder identityBinder = new IdentityBinder(simpleIdBinder, compositeIdBinder) VersionBinder versionBinder = new VersionBinder(metadataBuildingContext, simpleValueBinder, propertyBinderHelper, BasicValue::new) - ClassBinder classBinder = new ClassBinder() + ClassBinder classBinder = new ClassBinder(getCollector()) ClassPropertiesBinder classPropertiesBinder = new ClassPropertiesBinder(propertyBinder, propertyFromValueCreator) - MultiTenantFilterBinder multiTenantFilterBinder = new MultiTenantFilterBinder(new org.grails.orm.hibernate.cfg.domainbinding.util.GrailsPropertyResolver(), new org.grails.orm.hibernate.cfg.domainbinding.util.MultiTenantFilterDefinitionBinder(), binder.getMetadataBuildingContext().getMetadataCollector(), defaultColumnNameFetcher) - JoinedSubClassBinder joinedSubClassBinder = new JoinedSubClassBinder(metadataBuildingContext, namingStrategy, new org.grails.orm.hibernate.cfg.domainbinding.binder.SimpleValueColumnBinder(), columnNameForPropertyAndPathFetcher, classBinder) - UnionSubclassBinder unionSubclassBinder = new UnionSubclassBinder(metadataBuildingContext, namingStrategy, classBinder) + MultiTenantFilterBinder multiTenantFilterBinder = new MultiTenantFilterBinder(new org.grails.orm.hibernate.cfg.domainbinding.util.GrailsPropertyResolver(), new org.grails.orm.hibernate.cfg.domainbinding.util.MultiTenantFilterDefinitionBinder(), getCollector(), defaultColumnNameFetcher) + JoinedSubClassBinder joinedSubClassBinder = new JoinedSubClassBinder(metadataBuildingContext, namingStrategy, new org.grails.orm.hibernate.cfg.domainbinding.binder.SimpleValueColumnBinder(), columnNameForPropertyAndPathFetcher, classBinder, getCollector()) + UnionSubclassBinder unionSubclassBinder = new UnionSubclassBinder(metadataBuildingContext, namingStrategy, classBinder, getCollector()) SingleTableSubclassBinder singleTableSubclassBinder = new SingleTableSubclassBinder(classBinder) SubclassMappingBinder subclassMappingBinder = new SubclassMappingBinder(metadataBuildingContext, joinedSubClassBinder, unionSubclassBinder, singleTableSubclassBinder, classPropertiesBinder) - SubClassBinder subClassBinder = new SubClassBinder(binder.getMappingCacheHolder(), subclassMappingBinder, multiTenantFilterBinder, "dataSource") - RootPersistentClassCommonValuesBinder rootPersistentClassCommonValuesBinder = new RootPersistentClassCommonValuesBinder(metadataBuildingContext, namingStrategy, identityBinder, versionBinder, classBinder, classPropertiesBinder) + SubClassBinder subClassBinder = new SubClassBinder(binder.getMappingCacheHolder(), subclassMappingBinder, multiTenantFilterBinder, "dataSource", getCollector()) + RootPersistentClassCommonValuesBinder rootPersistentClassCommonValuesBinder = new RootPersistentClassCommonValuesBinder(metadataBuildingContext, namingStrategy, identityBinder, versionBinder, classBinder, classPropertiesBinder, getCollector()) DiscriminatorPropertyBinder discriminatorPropertyBinder = new DiscriminatorPropertyBinder(metadataBuildingContext, binder.getMappingCacheHolder(), new org.grails.orm.hibernate.cfg.domainbinding.binder.ConfiguredDiscriminatorBinder(new org.grails.orm.hibernate.cfg.domainbinding.binder.SimpleValueColumnBinder(), new ColumnConfigToColumnBinder()), new org.grails.orm.hibernate.cfg.domainbinding.binder.DefaultDiscriminatorBinder(new org.grails.orm.hibernate.cfg.domainbinding.binder.Si [...] - RootBinder rootBinder = new RootBinder("default", multiTenantFilterBinder, subClassBinder, rootPersistentClassCommonValuesBinder, discriminatorPropertyBinder) + RootBinder rootBinder = new RootBinder("default", multiTenantFilterBinder, subClassBinder, rootPersistentClassCommonValuesBinder, discriminatorPropertyBinder, getCollector()) return [ propertyBinder: propertyBinder, @@ -143,7 +145,7 @@ class CollectionBinderSpec extends HibernateGormDatastoreSpec { protected void bindRoot(GrailsDomainBinder binder, GrailsHibernatePersistentEntity entity, InFlightMetadataCollector mappings, String sessionFactoryBeanName) { def binders = getBinders(binder) - binders.rootBinder.bindRoot(entity, mappings) + binders.rootBinder.bindRoot(entity) } void setupSpec() { @@ -170,7 +172,7 @@ class CollectionBinderSpec extends HibernateGormDatastoreSpec { def petsProp = personEntity.getPropertyByName("pets") as HibernateToManyProperty when: - def collection = collectionBinder.bindCollection(petsProp, rootClass, collector, "") + def collection = collectionBinder.bindCollection(petsProp, rootClass, "") then: collection.role == "${personEntity.name}.pets".toString() 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 1c535e7f2a..b76048a4d6 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 @@ -109,7 +109,7 @@ class GrailsPropertyBinderSpec extends HibernateGormDatastoreSpec { prop.getMappedForm() >> config } - protected Map getBinders(GrailsDomainBinder binder) { + protected Map getBinders(GrailsDomainBinder binder, InFlightMetadataCollector collector = getCollector()) { MetadataBuildingContext metadataBuildingContext = binder.getMetadataBuildingContext() PersistentEntityNamingStrategy namingStrategy = binder.getNamingStrategy() JdbcEnvironment jdbcEnvironment = binder.getJdbcEnvironment() @@ -141,7 +141,8 @@ class GrailsPropertyBinderSpec extends HibernateGormDatastoreSpec { compositeIdentifierToManyToOneBinder, simpleValueColumnFetcher , - collectionHolder + collectionHolder, + collector ) PropertyFromValueCreator propertyFromValueCreator = new PropertyFromValueCreator() ComponentUpdater componentUpdater = new ComponentUpdater(propertyFromValueCreator) @@ -170,18 +171,18 @@ class GrailsPropertyBinderSpec extends HibernateGormDatastoreSpec { VersionBinder versionBinder = new VersionBinder(metadataBuildingContext, simpleValueBinder, propertyBinderHelper, BasicValue::new) NaturalIdentifierBinder naturalIdentifierBinder = new NaturalIdentifierBinder() - ClassBinder classBinder = new ClassBinder() + ClassBinder classBinder = new ClassBinder(collector) ClassPropertiesBinder classPropertiesBinder = new ClassPropertiesBinder(propertyBinder, propertyFromValueCreator, naturalIdentifierBinder) - MultiTenantFilterBinder multiTenantFilterBinder = new MultiTenantFilterBinder(new org.grails.orm.hibernate.cfg.domainbinding.util.GrailsPropertyResolver(), new org.grails.orm.hibernate.cfg.domainbinding.util.MultiTenantFilterDefinitionBinder(), binder.getMetadataBuildingContext().getMetadataCollector(), defaultColumnNameFetcher) - JoinedSubClassBinder joinedSubClassBinder = new JoinedSubClassBinder(metadataBuildingContext, namingStrategy, new org.grails.orm.hibernate.cfg.domainbinding.binder.SimpleValueColumnBinder(), columnNameForPropertyAndPathFetcher, classBinder) - UnionSubclassBinder unionSubclassBinder = new UnionSubclassBinder(metadataBuildingContext, namingStrategy, classBinder) + MultiTenantFilterBinder multiTenantFilterBinder = new MultiTenantFilterBinder(new org.grails.orm.hibernate.cfg.domainbinding.util.GrailsPropertyResolver(), new org.grails.orm.hibernate.cfg.domainbinding.util.MultiTenantFilterDefinitionBinder(), collector, defaultColumnNameFetcher) + JoinedSubClassBinder joinedSubClassBinder = new JoinedSubClassBinder(metadataBuildingContext, namingStrategy, new org.grails.orm.hibernate.cfg.domainbinding.binder.SimpleValueColumnBinder(), columnNameForPropertyAndPathFetcher, classBinder, collector) + UnionSubclassBinder unionSubclassBinder = new UnionSubclassBinder(metadataBuildingContext, namingStrategy, classBinder, collector) SingleTableSubclassBinder singleTableSubclassBinder = new SingleTableSubclassBinder(classBinder) SubclassMappingBinder subclassMappingBinder = new SubclassMappingBinder(metadataBuildingContext, joinedSubClassBinder, unionSubclassBinder, singleTableSubclassBinder, classPropertiesBinder) - SubClassBinder subClassBinder = new SubClassBinder(binder.getMappingCacheHolder(), subclassMappingBinder, multiTenantFilterBinder, "dataSource") - RootPersistentClassCommonValuesBinder rootPersistentClassCommonValuesBinder = new RootPersistentClassCommonValuesBinder(metadataBuildingContext, namingStrategy, identityBinder, versionBinder, classBinder, classPropertiesBinder) + SubClassBinder subClassBinder = new SubClassBinder(binder.getMappingCacheHolder(), subclassMappingBinder, multiTenantFilterBinder, "dataSource", collector) + RootPersistentClassCommonValuesBinder rootPersistentClassCommonValuesBinder = new RootPersistentClassCommonValuesBinder(metadataBuildingContext, namingStrategy, identityBinder, versionBinder, classBinder, classPropertiesBinder, collector) DiscriminatorPropertyBinder discriminatorPropertyBinder = new DiscriminatorPropertyBinder(metadataBuildingContext, binder.getMappingCacheHolder(), new org.grails.orm.hibernate.cfg.domainbinding.binder.ConfiguredDiscriminatorBinder(new org.grails.orm.hibernate.cfg.domainbinding.binder.SimpleValueColumnBinder(), new ColumnConfigToColumnBinder()), new org.grails.orm.hibernate.cfg.domainbinding.binder.DefaultDiscriminatorBinder(new org.grails.orm.hibernate.cfg.domainbinding.binder.Si [...] - RootBinder rootBinder = new RootBinder("default", multiTenantFilterBinder, subClassBinder, rootPersistentClassCommonValuesBinder, discriminatorPropertyBinder) + RootBinder rootBinder = new RootBinder("default", multiTenantFilterBinder, subClassBinder, rootPersistentClassCommonValuesBinder, discriminatorPropertyBinder, collector) return [ propertyBinder: propertyBinder, @@ -203,8 +204,8 @@ class GrailsPropertyBinderSpec extends HibernateGormDatastoreSpec { } protected void bindRoot(GrailsDomainBinder binder, GrailsHibernatePersistentEntity entity, InFlightMetadataCollector mappings, String sessionFactoryBeanName) { - def binders = getBinders(binder) - binders.rootBinder.bindRoot(entity, mappings) + def binders = getBinders(binder, mappings) + binders.rootBinder.bindRoot(entity) } void setupSpec() { manager.addAllDomainClasses([ @@ -349,9 +350,8 @@ class GrailsPropertyBinderSpec extends HibernateGormDatastoreSpec { void "Test bind list collection"() { given: def binder = getGrailsDomainBinder() - def propertyBinder = getBinders(binder).propertyBinder def collector = getCollector() - + def propertyBinder = getBinders(binder, collector).propertyBinder def bookEntity = createPersistentEntity(ListBook) def authorEntity = createPersistentEntity(ListAuthor) @@ -389,8 +389,8 @@ class GrailsPropertyBinderSpec extends HibernateGormDatastoreSpec { void "Test bind map collection"() { given: def binder = getGrailsDomainBinder() - def propertyBinder = getBinders(binder).propertyBinder def collector = getCollector() + def propertyBinder = getBinders(binder, collector).propertyBinder def bookEntity = createPersistentEntity(MapBook) def authorEntity = createPersistentEntity(MapAuthor) diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/JoinedSubClassBinderSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/JoinedSubClassBinderSpec.groovy index 0a78b7dcac..64273c2d6e 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/JoinedSubClassBinderSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/JoinedSubClassBinderSpec.groovy @@ -15,17 +15,18 @@ class JoinedSubClassBinderSpec extends HibernateGormDatastoreSpec { JoinedSubClassBinder binder ColumnNameForPropertyAndPathFetcher fetcher - ClassBinder classBinder = new ClassBinder() + ClassBinder classBinder SimpleValueColumnBinder simpleValueColumnBinder = new SimpleValueColumnBinder() void setup() { def buildingContext = getGrailsDomainBinder().getMetadataBuildingContext() + classBinder = new ClassBinder(buildingContext.getMetadataCollector()) def namingStrategy = getGrailsDomainBinder().getNamingStrategy() def backticksRemover = new org.grails.orm.hibernate.cfg.domainbinding.util.BackticksRemover() def defaultColumnNameFetcher = new org.grails.orm.hibernate.cfg.domainbinding.util.DefaultColumnNameFetcher(namingStrategy, backticksRemover) fetcher = new org.grails.orm.hibernate.cfg.domainbinding.util.ColumnNameForPropertyAndPathFetcher(namingStrategy, defaultColumnNameFetcher, backticksRemover) - binder = new JoinedSubClassBinder(buildingContext, namingStrategy, simpleValueColumnBinder, fetcher, classBinder) + binder = new JoinedSubClassBinder(buildingContext, namingStrategy, simpleValueColumnBinder, fetcher, classBinder, buildingContext.getMetadataCollector()) } void "test bind joined subclass with real entities"() { @@ -58,7 +59,7 @@ class JoinedSubClassBinderSpec extends HibernateGormDatastoreSpec { joinedSubclass.setEntityName(JoinedSubClassSub.name) when: - binder.bindJoinedSubClass(subEntity, joinedSubclass, mappings) + binder.bindJoinedSubClass(subEntity, joinedSubclass) then: joinedSubclass.getTable() != null diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/RootBinderSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/RootBinderSpec.groovy index 9d99c2db1d..df21696b11 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/RootBinderSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/RootBinderSpec.groovy @@ -18,11 +18,13 @@ class RootBinderSpec extends HibernateGormDatastoreSpec { DiscriminatorPropertyBinder discriminatorPropertyBinder MetadataBuildingContext metadataBuildingContext PersistentEntityNamingStrategy namingStrategy + def sharedCollector void setup() { def gdb = getGrailsDomainBinder() metadataBuildingContext = gdb.getMetadataBuildingContext() namingStrategy = gdb.getNamingStrategy() + sharedCollector = getCollector() multiTenantFilterBinder = Mock(MultiTenantFilterBinder) subClassBinder = Mock(SubClassBinder) @@ -34,7 +36,8 @@ class RootBinderSpec extends HibernateGormDatastoreSpec { multiTenantFilterBinder, subClassBinder, rootPersistentClassCommonValuesBinder, - discriminatorPropertyBinder + discriminatorPropertyBinder, + sharedCollector ) } @@ -45,18 +48,18 @@ class RootBinderSpec extends HibernateGormDatastoreSpec { entity.getChildEntities("default") >> [] entity.getMappedForm() >> new Mapping() - def mappings = getCollector() + def mappings = sharedCollector def rootClass = new RootClass(metadataBuildingContext) rootClass.setEntityName("Parent") rootClass.setJpaEntityName("Parent") when: - binder.bindRoot(entity, mappings) + binder.bindRoot(entity) then: - 1 * rootPersistentClassCommonValuesBinder.bindRootPersistentClassCommonValues(entity, [], mappings) >> rootClass + 1 * rootPersistentClassCommonValuesBinder.bindRootPersistentClassCommonValues(entity, []) >> rootClass 0 * discriminatorPropertyBinder.bindDiscriminatorProperty(_) - 0 * subClassBinder.bindSubClass(_, _, _) + 0 * subClassBinder.bindSubClass(_, _) 1 * multiTenantFilterBinder.bind(entity, rootClass) mappings.getEntityBinding("Parent") == rootClass } @@ -72,18 +75,18 @@ class RootBinderSpec extends HibernateGormDatastoreSpec { entity.getMappedForm() >> mapping entity.isTablePerHierarchy() >> true - def mappings = getCollector() + def mappings = sharedCollector def rootClass = new RootClass(metadataBuildingContext) rootClass.setEntityName("Parent") rootClass.setJpaEntityName("Parent") when: - binder.bindRoot(entity, mappings) + binder.bindRoot(entity) then: - 1 * rootPersistentClassCommonValuesBinder.bindRootPersistentClassCommonValues(entity, [childEntity], mappings) >> rootClass + 1 * rootPersistentClassCommonValuesBinder.bindRootPersistentClassCommonValues(entity, [childEntity]) >> rootClass 1 * discriminatorPropertyBinder.bindDiscriminatorProperty(rootClass) - 1 * subClassBinder.bindSubClass(childEntity, rootClass, mappings) + 1 * subClassBinder.bindSubClass(childEntity, rootClass) 1 * multiTenantFilterBinder.bind(entity, rootClass) mappings.getEntityBinding("Parent") == rootClass } @@ -92,16 +95,16 @@ class RootBinderSpec extends HibernateGormDatastoreSpec { given: def entity = Mock(GrailsHibernatePersistentEntity) entity.getName() >> "Parent" - def mappings = getCollector() + def mappings = sharedCollector def rootClass = new RootClass(metadataBuildingContext) rootClass.setEntityName("Parent") rootClass.setJpaEntityName("Parent") mappings.addEntityBinding(rootClass) when: - binder.bindRoot(entity, mappings) + binder.bindRoot(entity) then: - 0 * rootPersistentClassCommonValuesBinder.bindRootPersistentClassCommonValues(_, _, _) + 0 * rootPersistentClassCommonValuesBinder.bindRootPersistentClassCommonValues(_, _) } } diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/RootPersistentClassCommonValuesBinderSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/RootPersistentClassCommonValuesBinderSpec.groovy index a1ea763a5a..c9b66dbe4f 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/RootPersistentClassCommonValuesBinderSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/RootPersistentClassCommonValuesBinderSpec.groovy @@ -33,7 +33,7 @@ class RootPersistentClassCommonValuesBinderSpec extends HibernateGormDatastoreSp def compositeIdBinder = new CompositeIdBinder(metadataBuildingContext, null, null) identityBinder = new IdentityBinder(simpleIdBinder, compositeIdBinder) versionBinder = new VersionBinder(metadataBuildingContext, simpleValueBinder, propertyBinder, BasicValue::new) - classBinder = new ClassBinder() + classBinder = new ClassBinder(getCollector()) classPropertiesBinder = Mock(ClassPropertiesBinder) binder = new RootPersistentClassCommonValuesBinder( @@ -42,7 +42,8 @@ class RootPersistentClassCommonValuesBinderSpec extends HibernateGormDatastoreSp identityBinder, versionBinder, classBinder, - classPropertiesBinder + classPropertiesBinder, + getCollector() ) } @@ -52,10 +53,10 @@ class RootPersistentClassCommonValuesBinderSpec extends HibernateGormDatastoreSp def mappings = getCollector() when: - RootClass rootClass = binder.bindRootPersistentClassCommonValues(entity, [], mappings) + RootClass rootClass = binder.bindRootPersistentClassCommonValues(entity, []) then: - 1 * classPropertiesBinder.bindClassProperties(entity, _, mappings) + 1 * classPropertiesBinder.bindClassProperties(entity, _, _) rootClass != null rootClass.getEntityName() == TestEntity.name rootClass.isAbstract() == false @@ -68,7 +69,7 @@ class RootPersistentClassCommonValuesBinderSpec extends HibernateGormDatastoreSp def mappings = getCollector() when: - RootClass rootClass = binder.bindRootPersistentClassCommonValues(entity, [], mappings) + RootClass rootClass = binder.bindRootPersistentClassCommonValues(entity, []) then: rootClass != null diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SingleTableSubclassBinderSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SingleTableSubclassBinderSpec.groovy index 9e76d4a527..ee4844fdf0 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SingleTableSubclassBinderSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SingleTableSubclassBinderSpec.groovy @@ -12,9 +12,11 @@ import org.hibernate.mapping.SingleTableSubclass class SingleTableSubclassBinderSpec extends HibernateGormDatastoreSpec { SingleTableSubclassBinder binder - ClassBinder classBinder = new ClassBinder() + ClassBinder classBinder void setup() { + def buildingContext = getGrailsDomainBinder().getMetadataBuildingContext() + classBinder = new ClassBinder(buildingContext.getMetadataCollector()) binder = new SingleTableSubclassBinder(classBinder) } diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SubClassBinderSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SubClassBinderSpec.groovy index eb7ba303dd..0583b54d19 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SubClassBinderSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SubClassBinderSpec.groovy @@ -19,9 +19,11 @@ class SubClassBinderSpec extends HibernateGormDatastoreSpec { MultiTenantFilterBinder multiTenantFilterBinder MappingCacheHolder mappingCacheHolder MetadataBuildingContext metadataBuildingContext + def sharedCollector void setup() { def gdb = getGrailsDomainBinder() + sharedCollector = getCollector() metadataBuildingContext = gdb.getMetadataBuildingContext() mappingCacheHolder = gdb.getMappingCacheHolder() @@ -32,7 +34,8 @@ class SubClassBinderSpec extends HibernateGormDatastoreSpec { mappingCacheHolder, subclassMappingBinder, multiTenantFilterBinder, - "default" + "default", + sharedCollector ) } @@ -44,17 +47,17 @@ class SubClassBinderSpec extends HibernateGormDatastoreSpec { def rootClass = new RootClass(metadataBuildingContext) rootClass.setEntityName("Parent") rootClass.setJpaEntityName("Parent") - def mappings = getCollector() + def mappings = sharedCollector def mapping = new Mapping() def subClass = new org.hibernate.mapping.SingleTableSubclass(rootClass, metadataBuildingContext) subClass.setEntityName("Child") subClass.setJpaEntityName("Child") when: - binder.bindSubClass(subEntity, rootClass, mappings) + binder.bindSubClass(subEntity, rootClass) then: - 1 * subclassMappingBinder.createSubclassMapping(subEntity, rootClass, mappings) >> subClass + 1 * subclassMappingBinder.createSubclassMapping(subEntity, rootClass, _) >> subClass 1 * multiTenantFilterBinder.bind(subEntity, subClass) rootClass.getSubclasses().contains(subClass) mappings.getEntityBinding(subClass.getEntityName()) == subClass @@ -72,7 +75,7 @@ class SubClassBinderSpec extends HibernateGormDatastoreSpec { def rootClass = new RootClass(metadataBuildingContext) rootClass.setEntityName("Parent") rootClass.setJpaEntityName("Parent") - def mappings = getCollector() + def mappings = sharedCollector def mapping = new Mapping() def subClass = new org.hibernate.mapping.SingleTableSubclass(rootClass, metadataBuildingContext) @@ -83,11 +86,11 @@ class SubClassBinderSpec extends HibernateGormDatastoreSpec { grandChildSubClass.setJpaEntityName("GrandChild") when: - binder.bindSubClass(subEntity, rootClass, mappings) + binder.bindSubClass(subEntity, rootClass) then: - 1 * subclassMappingBinder.createSubclassMapping(subEntity, rootClass, mappings) >> subClass - 1 * subclassMappingBinder.createSubclassMapping(grandChildEntity, subClass, mappings) >> grandChildSubClass + 1 * subclassMappingBinder.createSubclassMapping(subEntity, rootClass, _) >> subClass + 1 * subclassMappingBinder.createSubclassMapping(grandChildEntity, subClass, _) >> grandChildSubClass 2 * multiTenantFilterBinder.bind(_, _) rootClass.getSubclasses().contains(subClass) subClass.getSubclasses().contains(grandChildSubClass) diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SubclassMappingBinderSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SubclassMappingBinderSpec.groovy index 77492c8ad7..3d26e162a3 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SubclassMappingBinderSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SubclassMappingBinderSpec.groovy @@ -73,7 +73,7 @@ class SubclassMappingBinderSpec extends HibernateGormDatastoreSpec { then: subEntity != null - 1 * joinedSubClassBinder.bindJoinedSubClass(subEntity, _ as JoinedSubclass, mappings) + 1 * joinedSubClassBinder.bindJoinedSubClass(subEntity, _ as JoinedSubclass) 1 * classPropertiesBinder.bindClassProperties(subEntity, _ as Subclass, mappings) subClass instanceof JoinedSubclass subClass.getEntityName() == SMBSJoinedSub.name @@ -93,7 +93,7 @@ class SubclassMappingBinderSpec extends HibernateGormDatastoreSpec { then: subEntity != null - 1 * unionSubclassBinder.bindUnionSubclass(subEntity, _ as UnionSubclass, mappings) + 1 * unionSubclassBinder.bindUnionSubclass(subEntity, _ as UnionSubclass) 1 * classPropertiesBinder.bindClassProperties(subEntity, _ as Subclass, mappings) subClass instanceof UnionSubclass subClass.getEntityName() == SMBSUnionSub.name diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/UnionSubclassBinderSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/UnionSubclassBinderSpec.groovy index f807a623a9..62aa2bbc0f 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/UnionSubclassBinderSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/UnionSubclassBinderSpec.groovy @@ -13,12 +13,13 @@ import org.hibernate.mapping.UnionSubclass class UnionSubclassBinderSpec extends HibernateGormDatastoreSpec { UnionSubclassBinder binder - ClassBinder classBinder = new ClassBinder() + ClassBinder classBinder void setup() { def buildingContext = getGrailsDomainBinder().getMetadataBuildingContext() def namingStrategy = getGrailsDomainBinder().getNamingStrategy() - binder = new UnionSubclassBinder(buildingContext, namingStrategy, classBinder) + classBinder = new ClassBinder(buildingContext.getMetadataCollector()) + binder = new UnionSubclassBinder(buildingContext, namingStrategy, classBinder, buildingContext.getMetadataCollector()) } void "test bind union subclass with real entities"() { @@ -42,7 +43,7 @@ class UnionSubclassBinderSpec extends HibernateGormDatastoreSpec { unionSubclass.setEntityName(UnionSubClassSub.name) when: - binder.bindUnionSubclass(subEntity, unionSubclass, mappings) + binder.bindUnionSubclass(subEntity, unionSubclass) then: unionSubclass.getTable() != null diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/CollectionSecondPassBinderSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/CollectionSecondPassBinderSpec.groovy index 535781933d..38eb6c4761 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/CollectionSecondPassBinderSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/CollectionSecondPassBinderSpec.groovy @@ -38,7 +38,7 @@ class CollectionSecondPassBinderSpec extends HibernateGormDatastoreSpec { def botml = new BidirectionalOneToManyLinker(new org.grails.orm.hibernate.cfg.domainbinding.util.GrailsPropertyResolver()) def dkvb = new DependentKeyValueBinder(svb, citmto) def cwjtb = new CollectionWithJoinTableBinder(mbc, ns, new UnidirectionalOneToManyInverseValuesBinder(), null, citmto, svcf, new CollectionForPropertyConfigBinder(), new SimpleValueColumnBinder(), null) - def uotmb = new UnidirectionalOneToManyBinder(cwjtb) + def uotmb = new UnidirectionalOneToManyBinder(cwjtb, mbc.getMetadataCollector()) def cfpcb = new CollectionForPropertyConfigBinder() def dcnf = new DefaultColumnNameFetcher(ns, new BackticksRemover()) def svcb = new SimpleValueColumnBinder() diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/ListSecondPassBinderSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/ListSecondPassBinderSpec.groovy index ce263b4dc2..f136a62ced 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/ListSecondPassBinderSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/ListSecondPassBinderSpec.groovy @@ -50,6 +50,7 @@ import org.grails.orm.hibernate.cfg.domainbinding.binder.SingleTableSubclassBind class ListSecondPassBinderSpec extends HibernateGormDatastoreSpec { protected Map getBinders(GrailsDomainBinder binder) { + def collector = getCollector() MetadataBuildingContext metadataBuildingContext = binder.getMetadataBuildingContext() PersistentEntityNamingStrategy namingStrategy = binder.getNamingStrategy() JdbcEnvironment jdbcEnvironment = binder.getJdbcEnvironment() @@ -81,7 +82,8 @@ class ListSecondPassBinderSpec extends HibernateGormDatastoreSpec { compositeIdentifierToManyToOneBinder, simpleValueColumnFetcher , - collectionHolder + collectionHolder, + getCollector() ) PropertyFromValueCreator propertyFromValueCreator = new PropertyFromValueCreator() ComponentUpdater componentUpdater = new ComponentUpdater(propertyFromValueCreator) @@ -109,18 +111,18 @@ class ListSecondPassBinderSpec extends HibernateGormDatastoreSpec { IdentityBinder identityBinder = new IdentityBinder(simpleIdBinder, compositeIdBinder) VersionBinder versionBinder = new VersionBinder(metadataBuildingContext, simpleValueBinder, propertyBinderHelper, BasicValue::new) - ClassBinder classBinder = new ClassBinder() + ClassBinder classBinder = new ClassBinder(getCollector()) ClassPropertiesBinder classPropertiesBinder = new ClassPropertiesBinder(propertyBinder, propertyFromValueCreator) - MultiTenantFilterBinder multiTenantFilterBinder = new MultiTenantFilterBinder(new org.grails.orm.hibernate.cfg.domainbinding.util.GrailsPropertyResolver(), new org.grails.orm.hibernate.cfg.domainbinding.util.MultiTenantFilterDefinitionBinder(), binder.getMetadataBuildingContext().getMetadataCollector(), defaultColumnNameFetcher) - JoinedSubClassBinder joinedSubClassBinder = new JoinedSubClassBinder(metadataBuildingContext, namingStrategy, new org.grails.orm.hibernate.cfg.domainbinding.binder.SimpleValueColumnBinder(), columnNameForPropertyAndPathFetcher, classBinder) - UnionSubclassBinder unionSubclassBinder = new UnionSubclassBinder(metadataBuildingContext, namingStrategy, classBinder) + MultiTenantFilterBinder multiTenantFilterBinder = new MultiTenantFilterBinder(new org.grails.orm.hibernate.cfg.domainbinding.util.GrailsPropertyResolver(), new org.grails.orm.hibernate.cfg.domainbinding.util.MultiTenantFilterDefinitionBinder(), getCollector(), defaultColumnNameFetcher) + JoinedSubClassBinder joinedSubClassBinder = new JoinedSubClassBinder(metadataBuildingContext, namingStrategy, new org.grails.orm.hibernate.cfg.domainbinding.binder.SimpleValueColumnBinder(), columnNameForPropertyAndPathFetcher, classBinder, getCollector()) + UnionSubclassBinder unionSubclassBinder = new UnionSubclassBinder(metadataBuildingContext, namingStrategy, classBinder, getCollector()) SingleTableSubclassBinder singleTableSubclassBinder = new SingleTableSubclassBinder(classBinder) SubclassMappingBinder subclassMappingBinder = new SubclassMappingBinder(metadataBuildingContext, joinedSubClassBinder, unionSubclassBinder, singleTableSubclassBinder, classPropertiesBinder) - SubClassBinder subClassBinder = new SubClassBinder(binder.getMappingCacheHolder(), subclassMappingBinder, multiTenantFilterBinder, "dataSource") - RootPersistentClassCommonValuesBinder rootPersistentClassCommonValuesBinder = new RootPersistentClassCommonValuesBinder(metadataBuildingContext, namingStrategy, identityBinder, versionBinder, classBinder, classPropertiesBinder) + SubClassBinder subClassBinder = new SubClassBinder(binder.getMappingCacheHolder(), subclassMappingBinder, multiTenantFilterBinder, "dataSource", getCollector()) + RootPersistentClassCommonValuesBinder rootPersistentClassCommonValuesBinder = new RootPersistentClassCommonValuesBinder(metadataBuildingContext, namingStrategy, identityBinder, versionBinder, classBinder, classPropertiesBinder, getCollector()) DiscriminatorPropertyBinder discriminatorPropertyBinder = new DiscriminatorPropertyBinder(metadataBuildingContext, binder.getMappingCacheHolder(), new org.grails.orm.hibernate.cfg.domainbinding.binder.ConfiguredDiscriminatorBinder(new org.grails.orm.hibernate.cfg.domainbinding.binder.SimpleValueColumnBinder(), new ColumnConfigToColumnBinder()), new org.grails.orm.hibernate.cfg.domainbinding.binder.DefaultDiscriminatorBinder(new org.grails.orm.hibernate.cfg.domainbinding.binder.Si [...] - RootBinder rootBinder = new RootBinder("default", multiTenantFilterBinder, subClassBinder, rootPersistentClassCommonValuesBinder, discriminatorPropertyBinder) + RootBinder rootBinder = new RootBinder("default", multiTenantFilterBinder, subClassBinder, rootPersistentClassCommonValuesBinder, discriminatorPropertyBinder, getCollector()) return [ propertyBinder: propertyBinder, @@ -142,7 +144,7 @@ class ListSecondPassBinderSpec extends HibernateGormDatastoreSpec { protected void bindRoot(GrailsDomainBinder binder, GrailsHibernatePersistentEntity entity, InFlightMetadataCollector mappings, String sessionFactoryBeanName) { def binders = getBinders(binder) - binders.rootBinder.bindRoot(entity, mappings) + binders.rootBinder.bindRoot(entity) } void setupSpec() { @@ -169,7 +171,7 @@ class ListSecondPassBinderSpec extends HibernateGormDatastoreSpec { def petsProp = personEntity.getPropertyByName("pets") as HibernateToManyProperty when: - def collection = collectionBinder.bindCollection(petsProp, rootClass, collector, "") + def collection = collectionBinder.bindCollection(petsProp, rootClass, "") then: collection.role == "${personEntity.name}.pets".toString() diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/MapSecondPassBinderSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/MapSecondPassBinderSpec.groovy index 430f44876a..cfbb66a509 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/MapSecondPassBinderSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/MapSecondPassBinderSpec.groovy @@ -50,6 +50,7 @@ import org.grails.orm.hibernate.cfg.domainbinding.binder.SingleTableSubclassBind class MapSecondPassBinderSpec extends HibernateGormDatastoreSpec { protected Map getBinders(GrailsDomainBinder binder) { + def collector = getCollector() MetadataBuildingContext metadataBuildingContext = binder.getMetadataBuildingContext() PersistentEntityNamingStrategy namingStrategy = binder.getNamingStrategy() JdbcEnvironment jdbcEnvironment = binder.getJdbcEnvironment() @@ -81,7 +82,8 @@ class MapSecondPassBinderSpec extends HibernateGormDatastoreSpec { compositeIdentifierToManyToOneBinder, simpleValueColumnFetcher , - collectionHolder + collectionHolder, + getCollector() ) PropertyFromValueCreator propertyFromValueCreator = new PropertyFromValueCreator() ComponentUpdater componentUpdater = new ComponentUpdater(propertyFromValueCreator) @@ -109,18 +111,18 @@ class MapSecondPassBinderSpec extends HibernateGormDatastoreSpec { IdentityBinder identityBinder = new IdentityBinder(simpleIdBinder, compositeIdBinder) VersionBinder versionBinder = new VersionBinder(metadataBuildingContext, simpleValueBinder, propertyBinderHelper, BasicValue::new) - ClassBinder classBinder = new ClassBinder() + ClassBinder classBinder = new ClassBinder(getCollector()) ClassPropertiesBinder classPropertiesBinder = new ClassPropertiesBinder(propertyBinder, propertyFromValueCreator) - MultiTenantFilterBinder multiTenantFilterBinder = new MultiTenantFilterBinder(new org.grails.orm.hibernate.cfg.domainbinding.util.GrailsPropertyResolver(), new org.grails.orm.hibernate.cfg.domainbinding.util.MultiTenantFilterDefinitionBinder(), binder.getMetadataBuildingContext().getMetadataCollector(), defaultColumnNameFetcher) - JoinedSubClassBinder joinedSubClassBinder = new JoinedSubClassBinder(metadataBuildingContext, namingStrategy, new org.grails.orm.hibernate.cfg.domainbinding.binder.SimpleValueColumnBinder(), columnNameForPropertyAndPathFetcher, classBinder) - UnionSubclassBinder unionSubclassBinder = new UnionSubclassBinder(metadataBuildingContext, namingStrategy, classBinder) + MultiTenantFilterBinder multiTenantFilterBinder = new MultiTenantFilterBinder(new org.grails.orm.hibernate.cfg.domainbinding.util.GrailsPropertyResolver(), new org.grails.orm.hibernate.cfg.domainbinding.util.MultiTenantFilterDefinitionBinder(), getCollector(), defaultColumnNameFetcher) + JoinedSubClassBinder joinedSubClassBinder = new JoinedSubClassBinder(metadataBuildingContext, namingStrategy, new org.grails.orm.hibernate.cfg.domainbinding.binder.SimpleValueColumnBinder(), columnNameForPropertyAndPathFetcher, classBinder, getCollector()) + UnionSubclassBinder unionSubclassBinder = new UnionSubclassBinder(metadataBuildingContext, namingStrategy, classBinder, getCollector()) SingleTableSubclassBinder singleTableSubclassBinder = new SingleTableSubclassBinder(classBinder) SubclassMappingBinder subclassMappingBinder = new SubclassMappingBinder(metadataBuildingContext, joinedSubClassBinder, unionSubclassBinder, singleTableSubclassBinder, classPropertiesBinder) - SubClassBinder subClassBinder = new SubClassBinder(binder.getMappingCacheHolder(), subclassMappingBinder, multiTenantFilterBinder, "dataSource") - RootPersistentClassCommonValuesBinder rootPersistentClassCommonValuesBinder = new RootPersistentClassCommonValuesBinder(metadataBuildingContext, namingStrategy, identityBinder, versionBinder, classBinder, classPropertiesBinder) + SubClassBinder subClassBinder = new SubClassBinder(binder.getMappingCacheHolder(), subclassMappingBinder, multiTenantFilterBinder, "dataSource", getCollector()) + RootPersistentClassCommonValuesBinder rootPersistentClassCommonValuesBinder = new RootPersistentClassCommonValuesBinder(metadataBuildingContext, namingStrategy, identityBinder, versionBinder, classBinder, classPropertiesBinder, getCollector()) DiscriminatorPropertyBinder discriminatorPropertyBinder = new DiscriminatorPropertyBinder(metadataBuildingContext, binder.getMappingCacheHolder(), new org.grails.orm.hibernate.cfg.domainbinding.binder.ConfiguredDiscriminatorBinder(new org.grails.orm.hibernate.cfg.domainbinding.binder.SimpleValueColumnBinder(), new ColumnConfigToColumnBinder()), new org.grails.orm.hibernate.cfg.domainbinding.binder.DefaultDiscriminatorBinder(new org.grails.orm.hibernate.cfg.domainbinding.binder.Si [...] - RootBinder rootBinder = new RootBinder("default", multiTenantFilterBinder, subClassBinder, rootPersistentClassCommonValuesBinder, discriminatorPropertyBinder) + RootBinder rootBinder = new RootBinder("default", multiTenantFilterBinder, subClassBinder, rootPersistentClassCommonValuesBinder, discriminatorPropertyBinder, getCollector()) return [ propertyBinder: propertyBinder, @@ -142,7 +144,7 @@ class MapSecondPassBinderSpec extends HibernateGormDatastoreSpec { protected void bindRoot(GrailsDomainBinder binder, GrailsHibernatePersistentEntity entity, InFlightMetadataCollector mappings, String sessionFactoryBeanName) { def binders = getBinders(binder) - binders.rootBinder.bindRoot(entity, mappings) + binders.rootBinder.bindRoot(entity) } void setupSpec() { @@ -169,7 +171,7 @@ class MapSecondPassBinderSpec extends HibernateGormDatastoreSpec { def petsProp = personEntity.getPropertyByName("pets") as HibernatePersistentProperty when: - def collection = collectionBinder.bindCollection(petsProp, rootClass, collector, "") + def collection = collectionBinder.bindCollection(petsProp, rootClass, "") then: collection.role == "${personEntity.name}.pets".toString() diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/UnidirectionalOneToManyBinderSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/UnidirectionalOneToManyBinderSpec.groovy index 159752cc1d..56682ccb04 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/UnidirectionalOneToManyBinderSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/UnidirectionalOneToManyBinderSpec.groovy @@ -56,7 +56,7 @@ class UnidirectionalOneToManyBinderSpec extends HibernateGormDatastoreSpec { new SimpleValueColumnBinder(), new ColumnConfigToColumnBinder() ) - binder = new UnidirectionalOneToManyBinder(collectionWithJoinTableBinder) + binder = new UnidirectionalOneToManyBinder(collectionWithJoinTableBinder, grailsDomainBinder.metadataBuildingContext.metadataCollector) } def "test bindUnidirectionalOneToMany with join table"() { @@ -79,7 +79,7 @@ class UnidirectionalOneToManyBinderSpec extends HibernateGormDatastoreSpec { collection.setKey(new BasicValue(grailsDomainBinder.metadataBuildingContext, ownerPersistentClass.getTable())) when: - binder.bind(ownerToPetsProperty, mappings, collection) + binder.bind(ownerToPetsProperty, collection) then: collection.isInverse() == false @@ -113,7 +113,7 @@ class UnidirectionalOneToManyBinderSpec extends HibernateGormDatastoreSpec { collection.setKey(new BasicValue(grailsDomainBinder.metadataBuildingContext, ownerPersistentClass.getTable())) when: - binder.bind(ownerToPetsProperty, mappings, collection) + binder.bind(ownerToPetsProperty, collection) then: collection.isInverse() == false
