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

Reply via email to