This is an automated email from the ASF dual-hosted git repository.

borinquenkid pushed a commit to branch 8.0.x-hibernate7
in repository https://gitbox.apache.org/repos/asf/grails-core.git

commit a5b37f1c7ee3672e2820590d410482a9d6642024
Author: Walter Duque de Estrada <[email protected]>
AuthorDate: Sat Feb 14 12:53:06 2026 -0600

    Refactor binders to support custom ID generator creation in 
SimpleValueBinder
    
    - Implement setCustomIdGeneratorCreator in SimpleValueBinder to handle 
custom ID generators via GrailsSequenceWrapper.
    - Refactor binders in grails-data-hibernate7 to follow the object injection 
pattern, using constructor injection for all binder dependencies.
    - Centralize binder instantiation and dependency management in 
GrailsDomainBinder.
    - Fix Table import in GrailsHibernatePersistentPropertySpec to resolve 
constructor mismatch failures.
    - Update unit tests to align with refactored binder constructors.
---
 .../orm/hibernate/cfg/GrailsDomainBinder.java      | 74 ++++++++++++++++++++--
 .../cfg/domainbinding/binder/CollectionBinder.java | 34 +++++++++-
 .../binder/ComponentPropertyBinder.java            | 52 ++++++++++-----
 .../CompositeIdentifierToManyToOneBinder.java      | 32 +++++-----
 .../domainbinding/binder/GrailsPropertyBinder.java | 43 +++++++------
 .../cfg/domainbinding/binder/ManyToOneBinder.java  | 25 ++++----
 .../cfg/domainbinding/binder/OneToOneBinder.java   | 11 ++--
 .../cfg/domainbinding/binder/SimpleIdBinder.java   | 12 +++-
 .../domainbinding/binder/SimpleValueBinder.java    | 56 ++++++++--------
 .../cfg/domainbinding/binder/VersionBinder.java    | 17 ++---
 .../secondpass/CollectionSecondPassBinder.java     | 46 +++++++++++---
 .../domainbinding/util/NamingStrategyWrapper.java  |  4 ++
 .../GrailsHibernatePersistentPropertySpec.groovy   |  7 +-
 .../CollectionSecondPassBinderSpec.groovy          | 13 +++-
 .../ComponentPropertyBinderSpec.groovy             | 15 ++++-
 .../domainbinding/ListSecondPassBinderSpec.groovy  | 12 +++-
 .../domainbinding/MapSecondPassBinderSpec.groovy   | 13 +++-
 .../cfg/domainbinding/SimpleValueBinderSpec.groovy |  6 +-
 .../cfg/domainbinding/VersionBinderSpec.groovy     |  1 +
 19 files changed, 337 insertions(+), 136 deletions(-)

diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java
index e22d885664..8f61097728 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java
@@ -31,17 +31,25 @@ import 
org.grails.orm.hibernate.cfg.domainbinding.util.NamingStrategyProvider;
 import org.grails.orm.hibernate.cfg.domainbinding.util.BasicValueIdCreator;
 import org.grails.orm.hibernate.cfg.domainbinding.binder.GrailsPropertyBinder;
 import org.grails.orm.hibernate.cfg.domainbinding.binder.IdentityBinder;
+import org.grails.orm.hibernate.cfg.domainbinding.binder.ManyToOneBinder;
+import org.grails.orm.hibernate.cfg.domainbinding.binder.ManyToOneValuesBinder;
+import org.grails.orm.hibernate.cfg.domainbinding.binder.OneToOneBinder;
+import org.grails.orm.hibernate.cfg.domainbinding.binder.PropertyBinder;
 import org.grails.orm.hibernate.cfg.domainbinding.binder.SimpleIdBinder;
 import 
org.grails.orm.hibernate.cfg.domainbinding.binder.NaturalIdentifierBinder;
+import org.grails.orm.hibernate.cfg.domainbinding.binder.SimpleValueBinder;
 import 
org.grails.orm.hibernate.cfg.domainbinding.binder.SimpleValueColumnBinder;
 import org.grails.orm.hibernate.cfg.domainbinding.binder.VersionBinder;
+import 
org.grails.orm.hibernate.cfg.domainbinding.binder.CompositeIdentifierToManyToOneBinder;
 import 
org.grails.orm.hibernate.cfg.domainbinding.collectionType.CollectionHolder;
 import org.grails.orm.hibernate.cfg.domainbinding.binder.CollectionBinder;
 import 
org.grails.orm.hibernate.cfg.domainbinding.util.ColumnNameForPropertyAndPathFetcher;
 import 
org.grails.orm.hibernate.cfg.domainbinding.util.DefaultColumnNameFetcher;
 import org.grails.orm.hibernate.cfg.domainbinding.util.BackticksRemover;
+import 
org.grails.orm.hibernate.cfg.domainbinding.util.ForeignKeyColumnCountCalculator;
 import org.grails.orm.hibernate.cfg.domainbinding.util.NamingStrategyWrapper;
 import 
org.grails.orm.hibernate.cfg.domainbinding.util.PropertyFromValueCreator;
+import 
org.grails.orm.hibernate.cfg.domainbinding.util.SimpleValueColumnFetcher;
 import org.grails.orm.hibernate.cfg.domainbinding.util.TableNameFetcher;
 
 import org.checkerframework.checker.nullness.qual.NonNull;
@@ -188,14 +196,68 @@ public class GrailsDomainBinder
                 , rootMappingDefaults
         );
         this.backticksRemover = new BackticksRemover();
-        this.defaultColumnNameFetcher = new 
DefaultColumnNameFetcher(getNamingStrategy(), backticksRemover);
-        this.collectionBinder = new CollectionBinder(metadataBuildingContext, 
this, getNamingStrategy());
-        this.componentPropertyBinder = new 
ComponentPropertyBinder(metadataBuildingContext, getNamingStrategy(), 
getMappingCacheHolder(), getCollectionHolder(), enumTypeBinder, 
collectionBinder, propertyFromValueCreator);
-        this.grailsPropertyBinder = new 
GrailsPropertyBinder(metadataBuildingContext, getNamingStrategy(), 
getCollectionHolder(), enumTypeBinder, componentPropertyBinder, 
collectionBinder, propertyFromValueCreator);
+        PersistentEntityNamingStrategy namingStrategy = getNamingStrategy();
+        JdbcEnvironment jdbcEnvironment = getJdbcEnvironment();
+        this.defaultColumnNameFetcher = new 
DefaultColumnNameFetcher(namingStrategy, backticksRemover);
+        ColumnNameForPropertyAndPathFetcher 
columnNameForPropertyAndPathFetcher = new 
ColumnNameForPropertyAndPathFetcher(namingStrategy, defaultColumnNameFetcher, 
backticksRemover);
+        SimpleValueBinder simpleValueBinder = new 
SimpleValueBinder(namingStrategy, jdbcEnvironment);
+        EnumTypeBinder enumTypeBinderToUse = enumTypeBinder != null ? 
enumTypeBinder : new EnumTypeBinder();
+        SimpleValueColumnFetcher simpleValueColumnFetcher = new 
SimpleValueColumnFetcher();
+        CompositeIdentifierToManyToOneBinder 
compositeIdentifierToManyToOneBinder = new CompositeIdentifierToManyToOneBinder(
+                new 
org.grails.orm.hibernate.cfg.domainbinding.util.ForeignKeyColumnCountCalculator(),
+                new TableNameFetcher(namingStrategy),
+                namingStrategy,
+                defaultColumnNameFetcher,
+                backticksRemover,
+                simpleValueBinder
+        );
+        OneToOneBinder oneToOneBinder = new OneToOneBinder(namingStrategy, 
simpleValueBinder);
+        ManyToOneBinder manyToOneBinder = new ManyToOneBinder(namingStrategy, 
simpleValueBinder, new ManyToOneValuesBinder(), 
compositeIdentifierToManyToOneBinder, simpleValueColumnFetcher);
+
+        this.collectionBinder = new CollectionBinder(
+                metadataBuildingContext,
+                this,
+                namingStrategy,
+                jdbcEnvironment,
+                simpleValueBinder,
+                enumTypeBinderToUse,
+                manyToOneBinder,
+                compositeIdentifierToManyToOneBinder,
+                simpleValueColumnFetcher
+        );
+        this.componentPropertyBinder = new ComponentPropertyBinder(
+                metadataBuildingContext,
+                namingStrategy,
+                jdbcEnvironment,
+                getMappingCacheHolder(),
+                getCollectionHolder(),
+                enumTypeBinderToUse,
+                collectionBinder,
+                propertyFromValueCreator,
+                null,
+                simpleValueBinder,
+                oneToOneBinder,
+                manyToOneBinder,
+                columnNameForPropertyAndPathFetcher
+        );
+        this.grailsPropertyBinder = new GrailsPropertyBinder(
+                metadataBuildingContext,
+                namingStrategy,
+                getCollectionHolder(),
+                enumTypeBinderToUse,
+                componentPropertyBinder,
+                collectionBinder,
+                simpleValueBinder,
+                columnNameForPropertyAndPathFetcher,
+                oneToOneBinder,
+                manyToOneBinder,
+                propertyFromValueCreator
+        );
         this.compositeIdBinder = new 
CompositeIdBinder(metadataBuildingContext, componentPropertyBinder);
-        SimpleIdBinder simpleIdBinder = new 
SimpleIdBinder(metadataBuildingContext, getNamingStrategy(), 
getJdbcEnvironment(), new BasicValueIdCreator(getJdbcEnvironment()));
+        PropertyBinder propertyBinder = new PropertyBinder();
+        SimpleIdBinder simpleIdBinder = new 
SimpleIdBinder(metadataBuildingContext, namingStrategy, jdbcEnvironment, new 
BasicValueIdCreator(jdbcEnvironment), simpleValueBinder, propertyBinder);
         this.identityBinder = new IdentityBinder(simpleIdBinder, 
compositeIdBinder);
-        this.versionBinder = new VersionBinder(metadataBuildingContext, 
getNamingStrategy());
+        this.versionBinder = new VersionBinder(metadataBuildingContext, 
simpleValueBinder, propertyBinder, BasicValue::new);
 
         hibernateMappingContext
                 .getHibernatePersistentEntities(dataSourceName)
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 bc10354bb4..7fdd21fd7a 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
@@ -12,6 +12,7 @@ import org.grails.orm.hibernate.cfg.PropertyConfig;
 import org.grails.orm.hibernate.cfg.JoinTable;
 import org.grails.orm.hibernate.cfg.domainbinding.util.CascadeBehavior;
 import org.grails.orm.hibernate.cfg.domainbinding.util.NamespaceNameExtractor;
+import 
org.grails.orm.hibernate.cfg.domainbinding.util.SimpleValueColumnFetcher;
 import org.grails.orm.hibernate.cfg.domainbinding.util.TableForManyCalculator;
 import 
org.grails.orm.hibernate.cfg.domainbinding.secondpass.CollectionSecondPassBinder;
 import org.grails.orm.hibernate.cfg.domainbinding.secondpass.ListSecondPass;
@@ -23,6 +24,7 @@ import 
org.grails.orm.hibernate.cfg.domainbinding.secondpass.SetSecondPass;
 import org.hibernate.FetchMode;
 import org.hibernate.boot.spi.InFlightMetadataCollector;
 import org.hibernate.boot.spi.MetadataBuildingContext;
+import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
 import org.hibernate.mapping.Collection;
 import org.hibernate.mapping.OneToMany;
 import org.hibernate.mapping.PersistentClass;
@@ -44,14 +46,40 @@ public class CollectionBinder {
     private final CollectionSecondPassBinder collectionSecondPassBinder;
     private final MapSecondPassBinder mapSecondPassBinder;
 
-    public CollectionBinder(MetadataBuildingContext metadataBuildingContext, 
GrailsDomainBinder grailsDomainBinder, PersistentEntityNamingStrategy 
namingStrategy) {
+    public CollectionBinder(
+            MetadataBuildingContext metadataBuildingContext,
+            GrailsDomainBinder grailsDomainBinder,
+            PersistentEntityNamingStrategy namingStrategy,
+            JdbcEnvironment jdbcEnvironment,
+            SimpleValueBinder simpleValueBinder,
+            EnumTypeBinder enumTypeBinder,
+            ManyToOneBinder manyToOneBinder,
+            CompositeIdentifierToManyToOneBinder 
compositeIdentifierToManyToOneBinder,
+            SimpleValueColumnFetcher simpleValueColumnFetcher) {
         this.metadataBuildingContext = metadataBuildingContext;
         this.grailsDomainBinder = grailsDomainBinder;
         this.namingStrategy = namingStrategy;
-        this.collectionSecondPassBinder = new 
CollectionSecondPassBinder(metadataBuildingContext, namingStrategy);
-        this.listSecondPassBinder = new 
ListSecondPassBinder(metadataBuildingContext, 
namingStrategy,collectionSecondPassBinder);
+        this.collectionSecondPassBinder = new CollectionSecondPassBinder(
+                metadataBuildingContext,
+                namingStrategy,
+                jdbcEnvironment,
+                simpleValueBinder,
+                enumTypeBinder,
+                manyToOneBinder,
+                compositeIdentifierToManyToOneBinder,
+                simpleValueColumnFetcher
+        );
+        this.listSecondPassBinder = new 
ListSecondPassBinder(metadataBuildingContext, namingStrategy, 
collectionSecondPassBinder);
         this.mapSecondPassBinder = new 
MapSecondPassBinder(metadataBuildingContext, namingStrategy, 
collectionSecondPassBinder);
+    }
 
+    public CollectionBinder(MetadataBuildingContext metadataBuildingContext, 
GrailsDomainBinder grailsDomainBinder, PersistentEntityNamingStrategy 
namingStrategy, JdbcEnvironment jdbcEnvironment) {
+        this(metadataBuildingContext, grailsDomainBinder, namingStrategy, 
jdbcEnvironment,
+                new SimpleValueBinder(namingStrategy, jdbcEnvironment),
+                new EnumTypeBinder(),
+                new ManyToOneBinder(namingStrategy, jdbcEnvironment),
+                new CompositeIdentifierToManyToOneBinder(namingStrategy, 
jdbcEnvironment),
+                new SimpleValueColumnFetcher());
     }
 
     /**
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ComponentPropertyBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ComponentPropertyBinder.java
index aae8a3b8a6..5a9fbde104 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ComponentPropertyBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ComponentPropertyBinder.java
@@ -4,6 +4,7 @@ import java.util.Iterator;
 
 import org.hibernate.boot.spi.InFlightMetadataCollector;
 import org.hibernate.boot.spi.MetadataBuildingContext;
+import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
 import org.hibernate.mapping.BasicValue;
 import org.hibernate.mapping.Collection;
 import org.hibernate.mapping.Column;
@@ -40,36 +41,50 @@ public class ComponentPropertyBinder {
 
     private final MetadataBuildingContext metadataBuildingContext;
     private final PersistentEntityNamingStrategy namingStrategy;
+    private final JdbcEnvironment jdbcEnvironment;
     private final MappingCacheHolder mappingCacheHolder;
     private final CollectionHolder collectionHolder;
     private final EnumTypeBinder enumTypeBinder;
     private final CollectionBinder collectionBinder;
     private final PropertyFromValueCreator propertyFromValueCreator;
+    private final ManyToOneBinder manyToOneBinder;
+    private final OneToOneBinder oneToOneBinder;
+    private final ColumnNameForPropertyAndPathFetcher 
columnNameForPropertyAndPathFetcher;
     private final SimpleValueBinder simpleValueBinder;
     private final ComponentBinder componentBinder;
 
     public ComponentPropertyBinder(MetadataBuildingContext 
metadataBuildingContext,
                                    PersistentEntityNamingStrategy 
namingStrategy,
+                                   JdbcEnvironment jdbcEnvironment,
                                    MappingCacheHolder mappingCacheHolder,
                                    CollectionHolder collectionHolder,
                                    EnumTypeBinder enumTypeBinder,
                                    CollectionBinder collectionBinder,
                                    PropertyFromValueCreator 
propertyFromValueCreator) {
-        this(metadataBuildingContext, namingStrategy, mappingCacheHolder, 
collectionHolder,
-                enumTypeBinder, collectionBinder, propertyFromValueCreator, 
null, new SimpleValueBinder(namingStrategy));
+        this(metadataBuildingContext, namingStrategy, jdbcEnvironment, 
mappingCacheHolder, collectionHolder,
+                enumTypeBinder, collectionBinder, propertyFromValueCreator, 
null,
+                new SimpleValueBinder(namingStrategy, jdbcEnvironment),
+                new OneToOneBinder(namingStrategy, jdbcEnvironment),
+                new ManyToOneBinder(namingStrategy, jdbcEnvironment),
+                new ColumnNameForPropertyAndPathFetcher(namingStrategy, new 
DefaultColumnNameFetcher(namingStrategy), new BackticksRemover()));
     }
 
-    protected ComponentPropertyBinder(MetadataBuildingContext 
metadataBuildingContext,
-                                   PersistentEntityNamingStrategy 
namingStrategy,
-                                   MappingCacheHolder mappingCacheHolder,
-                                   CollectionHolder collectionHolder,
-                                   EnumTypeBinder enumTypeBinder,
-                                   CollectionBinder collectionBinder,
-                                   PropertyFromValueCreator 
propertyFromValueCreator,
-                                   ComponentBinder componentBinder,
-                                   SimpleValueBinder simpleValueBinder) {
+    public ComponentPropertyBinder(MetadataBuildingContext 
metadataBuildingContext,
+                                      PersistentEntityNamingStrategy 
namingStrategy,
+                                      JdbcEnvironment jdbcEnvironment,
+                                      MappingCacheHolder mappingCacheHolder,
+                                      CollectionHolder collectionHolder,
+                                      EnumTypeBinder enumTypeBinder,
+                                      CollectionBinder collectionBinder,
+                                      PropertyFromValueCreator 
propertyFromValueCreator,
+                                      ComponentBinder componentBinder,
+                                      SimpleValueBinder simpleValueBinder,
+                                      OneToOneBinder oneToOneBinder,
+                                      ManyToOneBinder manyToOneBinder,
+                                      ColumnNameForPropertyAndPathFetcher 
columnNameForPropertyAndPathFetcher) {
         this.metadataBuildingContext = metadataBuildingContext;
         this.namingStrategy = namingStrategy;
+        this.jdbcEnvironment = jdbcEnvironment;
         this.mappingCacheHolder = mappingCacheHolder;
         this.collectionHolder = collectionHolder;
         this.enumTypeBinder = enumTypeBinder;
@@ -77,11 +92,15 @@ public class ComponentPropertyBinder {
         this.propertyFromValueCreator = propertyFromValueCreator;
         this.componentBinder = componentBinder != null ? componentBinder : new 
ComponentBinder(mappingCacheHolder, this);
         this.simpleValueBinder = simpleValueBinder;
+        this.oneToOneBinder = oneToOneBinder;
+        this.manyToOneBinder = manyToOneBinder;
+        this.columnNameForPropertyAndPathFetcher = 
columnNameForPropertyAndPathFetcher;
     }
 
     protected ComponentPropertyBinder() {
         this.metadataBuildingContext = null;
         this.namingStrategy = null;
+        this.jdbcEnvironment = null;
         this.mappingCacheHolder = null;
         this.collectionHolder = null;
         this.enumTypeBinder = null;
@@ -89,6 +108,9 @@ public class ComponentPropertyBinder {
         this.propertyFromValueCreator = null;
         this.componentBinder = null;
         this.simpleValueBinder = null;
+        this.manyToOneBinder = null;
+        this.oneToOneBinder = null;
+        this.columnNameForPropertyAndPathFetcher = null;
     }
 
     public void bindComponentProperty(Component component,
@@ -115,18 +137,18 @@ public class ComponentPropertyBinder {
                 LOG.debug("[GrailsDomainBinder] Binding property [" + 
currentGrailsProp.getName() + "] as ManyToOne");
 
             value = new ManyToOne(metadataBuildingContext, table);
-            new ManyToOneBinder(namingStrategy).bindManyToOne((Association) 
currentGrailsProp, (ManyToOne) value, path);
+            manyToOneBinder.bindManyToOne((Association) currentGrailsProp, 
(ManyToOne) value, path);
         } else if (currentGrailsProp instanceof 
org.grails.datastore.mapping.model.types.OneToOne association) {
             if (LOG.isDebugEnabled())
                 LOG.debug("[GrailsDomainBinder] Binding property [" + 
currentGrailsProp.getName() + "] as OneToOne");
 
             if (association.canBindOneToOneWithSingleColumnAndForeignKey()) {
                 value = new OneToOne(metadataBuildingContext, table, 
persistentClass);
-                new 
OneToOneBinder(namingStrategy).bindOneToOne((org.grails.datastore.mapping.model.types.OneToOne)
 currentGrailsProp, (OneToOne) value, path);
+                
oneToOneBinder.bindOneToOne((org.grails.datastore.mapping.model.types.OneToOne) 
currentGrailsProp, (OneToOne) value, path);
             }
             else {
                 value = new ManyToOne(metadataBuildingContext, table);
-                new 
ManyToOneBinder(namingStrategy).bindManyToOne((Association) currentGrailsProp, 
(ManyToOne) value, path);
+                manyToOneBinder.bindManyToOne((Association) currentGrailsProp, 
(ManyToOne) value, path);
             }
         }
         else if (currentGrailsProp instanceof HibernateEmbeddedProperty 
embedded) {
@@ -139,7 +161,7 @@ public class ComponentPropertyBinder {
 
             value = new BasicValue(metadataBuildingContext, table);
             if (currentGrailsProp.getType().isEnum()) {
-                String columnName = new 
ColumnNameForPropertyAndPathFetcher(namingStrategy, new 
DefaultColumnNameFetcher(namingStrategy), new 
BackticksRemover()).getColumnNameForPropertyAndPath(currentGrailsProp, path, 
null);
+                String columnName = 
columnNameForPropertyAndPathFetcher.getColumnNameForPropertyAndPath(currentGrailsProp,
 path, null);
                 enumTypeBinder.bindEnumType(currentGrailsProp, 
currentGrailsProp.getType(), (SimpleValue) value, columnName);
             }
             else {
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/CompositeIdentifierToManyToOneBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/CompositeIdentifierToManyToOneBinder.java
index 473842ad27..28c36e70d3 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/CompositeIdentifierToManyToOneBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/CompositeIdentifierToManyToOneBinder.java
@@ -2,6 +2,7 @@ package org.grails.orm.hibernate.cfg.domainbinding.binder;
 
 import java.util.List;
 
+import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
 import org.hibernate.mapping.SimpleValue;
 
 import org.grails.datastore.mapping.model.PersistentEntity;
@@ -27,21 +28,13 @@ public class CompositeIdentifierToManyToOneBinder {
     private final BackticksRemover backticksRemover;
     private final SimpleValueBinder simpleValueBinder;
 
-    public CompositeIdentifierToManyToOneBinder(PersistentEntityNamingStrategy 
namingStrategy){
-        this.foreignKeyColumnCountCalculator = new 
ForeignKeyColumnCountCalculator();
-        this.tableNameFetcher = new TableNameFetcher(namingStrategy);
-        this.namingStrategy = namingStrategy;
-        this.defaultColumnNameFetcher = new 
DefaultColumnNameFetcher(namingStrategy);
-        this.backticksRemover = new BackticksRemover();
-        this.simpleValueBinder = new SimpleValueBinder(namingStrategy);
-
-    }
-
-    protected 
CompositeIdentifierToManyToOneBinder(ForeignKeyColumnCountCalculator 
foreignKeyColumnCountCalculator
-    , TableNameFetcher tableNameFetcher
-    , PersistentEntityNamingStrategy namingStrategy
-    , DefaultColumnNameFetcher defaultColumnNameFetcher
-    , BackticksRemover backticksRemover, SimpleValueBinder simpleValueBinder) {
+    public CompositeIdentifierToManyToOneBinder(
+            ForeignKeyColumnCountCalculator foreignKeyColumnCountCalculator,
+            TableNameFetcher tableNameFetcher,
+            PersistentEntityNamingStrategy namingStrategy,
+            DefaultColumnNameFetcher defaultColumnNameFetcher,
+            BackticksRemover backticksRemover,
+            SimpleValueBinder simpleValueBinder) {
         this.foreignKeyColumnCountCalculator = foreignKeyColumnCountCalculator;
         this.tableNameFetcher =tableNameFetcher;
         this.namingStrategy = namingStrategy;
@@ -50,6 +43,15 @@ public class CompositeIdentifierToManyToOneBinder {
         this.simpleValueBinder = simpleValueBinder;
     }
 
+    public CompositeIdentifierToManyToOneBinder(PersistentEntityNamingStrategy 
namingStrategy, JdbcEnvironment jdbcEnvironment){
+        this(new ForeignKeyColumnCountCalculator(),
+                new TableNameFetcher(namingStrategy),
+                namingStrategy,
+                new DefaultColumnNameFetcher(namingStrategy),
+                new BackticksRemover(),
+                new SimpleValueBinder(namingStrategy, jdbcEnvironment));
+    }
+
     public void 
bindCompositeIdentifierToManyToOne(GrailsHibernatePersistentProperty property,
                                                     SimpleValue value, 
                                                    CompositeIdentity 
compositeId, 
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 69d65039c1..0c407946db 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
@@ -14,6 +14,7 @@ import 
org.grails.orm.hibernate.cfg.domainbinding.collectionType.CollectionHolde
 import 
org.grails.orm.hibernate.cfg.domainbinding.util.ColumnNameForPropertyAndPathFetcher;
 import 
org.grails.orm.hibernate.cfg.domainbinding.util.DefaultColumnNameFetcher;
 import org.grails.orm.hibernate.cfg.domainbinding.util.BackticksRemover;
+import org.grails.orm.hibernate.cfg.domainbinding.util.NamingStrategyWrapper;
 
 import org.hibernate.boot.spi.InFlightMetadataCollector;
 import org.hibernate.boot.spi.MetadataBuildingContext;
@@ -47,27 +48,6 @@ public class GrailsPropertyBinder {
     private final PropertyFromValueCreator propertyFromValueCreator;
 
     public GrailsPropertyBinder(
-            MetadataBuildingContext metadataBuildingContext,
-            PersistentEntityNamingStrategy namingStrategy,
-            CollectionHolder collectionHolder,
-            EnumTypeBinder enumTypeBinder,
-            ComponentPropertyBinder componentPropertyBinder,
-            CollectionBinder collectionBinder,
-            PropertyFromValueCreator propertyFromValueCreator) {
-        this(metadataBuildingContext,
-                namingStrategy,
-                collectionHolder,
-                enumTypeBinder,
-                componentPropertyBinder,
-                collectionBinder,
-                new SimpleValueBinder(namingStrategy),
-                new ColumnNameForPropertyAndPathFetcher(namingStrategy, new 
DefaultColumnNameFetcher(namingStrategy), new BackticksRemover()),
-                new OneToOneBinder(namingStrategy),
-                new ManyToOneBinder(namingStrategy),
-                propertyFromValueCreator);
-    }
-
-    protected GrailsPropertyBinder(
             MetadataBuildingContext metadataBuildingContext,
             PersistentEntityNamingStrategy namingStrategy,
             CollectionHolder collectionHolder,
@@ -91,6 +71,27 @@ public class GrailsPropertyBinder {
         this.propertyFromValueCreator = propertyFromValueCreator;
     }
 
+    public GrailsPropertyBinder(
+            MetadataBuildingContext metadataBuildingContext,
+            PersistentEntityNamingStrategy namingStrategy,
+            CollectionHolder collectionHolder,
+            EnumTypeBinder enumTypeBinder,
+            ComponentPropertyBinder componentPropertyBinder,
+            CollectionBinder collectionBinder,
+            PropertyFromValueCreator propertyFromValueCreator) {
+        this(metadataBuildingContext,
+                namingStrategy,
+                collectionHolder,
+                enumTypeBinder,
+                componentPropertyBinder,
+                collectionBinder,
+                new SimpleValueBinder(namingStrategy, 
((NamingStrategyWrapper)namingStrategy).getJdbcEnvironment()),
+                new ColumnNameForPropertyAndPathFetcher(namingStrategy, new 
DefaultColumnNameFetcher(namingStrategy), new BackticksRemover()),
+                new OneToOneBinder(namingStrategy, 
((NamingStrategyWrapper)namingStrategy).getJdbcEnvironment()),
+                new ManyToOneBinder(namingStrategy, 
((NamingStrategyWrapper)namingStrategy).getJdbcEnvironment()),
+                propertyFromValueCreator);
+    }
+
     public Value bindProperty(PersistentClass persistentClass
             , @Nonnull GrailsHibernatePersistentProperty currentGrailsProp
             , @Nonnull InFlightMetadataCollector mappings
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ManyToOneBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ManyToOneBinder.java
index 48f654ec6c..8fbf2521c2 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ManyToOneBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ManyToOneBinder.java
@@ -1,6 +1,7 @@
 package org.grails.orm.hibernate.cfg.domainbinding.binder;
 
 import org.hibernate.MappingException;
+import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
 import org.hibernate.mapping.Column;
 import org.hibernate.mapping.ManyToOne;
 
@@ -28,19 +29,11 @@ public class ManyToOneBinder {
     private final CompositeIdentifierToManyToOneBinder 
compositeIdentifierToManyToOneBinder;
     private final SimpleValueColumnFetcher simpleValueColumnFetcher;
 
-    public ManyToOneBinder(PersistentEntityNamingStrategy namingStrategy) {
-        this.namingStrategy = namingStrategy;
-        this.simpleValueBinder = new SimpleValueBinder(namingStrategy);
-        this.manyToOneValuesBinder = new ManyToOneValuesBinder();
-        this.compositeIdentifierToManyToOneBinder = new 
CompositeIdentifierToManyToOneBinder(namingStrategy);
-        this.simpleValueColumnFetcher = new SimpleValueColumnFetcher();
-    }
-
-    protected ManyToOneBinder(PersistentEntityNamingStrategy namingStrategy
+    public ManyToOneBinder(PersistentEntityNamingStrategy namingStrategy
             , SimpleValueBinder simpleValueBinder
-    , ManyToOneValuesBinder manyToOneValuesBinder
-    , CompositeIdentifierToManyToOneBinder compositeIdentifierToManyToOneBinder
-    , SimpleValueColumnFetcher simpleValueColumnFetcher) {
+            , ManyToOneValuesBinder manyToOneValuesBinder
+            , CompositeIdentifierToManyToOneBinder 
compositeIdentifierToManyToOneBinder
+            , SimpleValueColumnFetcher simpleValueColumnFetcher) {
         this.namingStrategy = namingStrategy;
         this.simpleValueBinder =simpleValueBinder;
         this.manyToOneValuesBinder = manyToOneValuesBinder;
@@ -48,6 +41,14 @@ public class ManyToOneBinder {
         this.simpleValueColumnFetcher = simpleValueColumnFetcher;
     }
 
+    public ManyToOneBinder(PersistentEntityNamingStrategy namingStrategy, 
JdbcEnvironment jdbcEnvironment) {
+        this(namingStrategy,
+                new SimpleValueBinder(namingStrategy, jdbcEnvironment),
+                new ManyToOneValuesBinder(),
+                new CompositeIdentifierToManyToOneBinder(namingStrategy, 
jdbcEnvironment),
+                new SimpleValueColumnFetcher());
+    }
+
 
     /**
      * Binds a many-to-one relationship to the
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/OneToOneBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/OneToOneBinder.java
index 853bafbe45..bc1109d7e6 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/OneToOneBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/OneToOneBinder.java
@@ -1,6 +1,7 @@
 package org.grails.orm.hibernate.cfg.domainbinding.binder;
 
 import org.hibernate.FetchMode;
+import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
 import org.hibernate.mapping.OneToOne;
 import org.hibernate.type.ForeignKeyDirection;
 
@@ -14,15 +15,13 @@ public class OneToOneBinder {
     private final PersistentEntityNamingStrategy namingStrategy;
     private final SimpleValueBinder simpleValueBinder;
 
-    public OneToOneBinder(PersistentEntityNamingStrategy namingStrategy) {
+    public OneToOneBinder(PersistentEntityNamingStrategy namingStrategy, 
SimpleValueBinder simpleValueBinder) {
         this.namingStrategy = namingStrategy;
-        this.simpleValueBinder = new SimpleValueBinder(namingStrategy);
+        this.simpleValueBinder = simpleValueBinder;
     }
 
-    protected OneToOneBinder(PersistentEntityNamingStrategy namingStrategy,
-                             SimpleValueBinder simpleValueBinder) {
-        this.namingStrategy = namingStrategy;
-        this.simpleValueBinder = simpleValueBinder;
+    public OneToOneBinder(PersistentEntityNamingStrategy namingStrategy, 
JdbcEnvironment jdbcEnvironment) {
+        this(namingStrategy, new SimpleValueBinder(namingStrategy, 
jdbcEnvironment));
     }
 
     public void bindOneToOne(final 
org.grails.datastore.mapping.model.types.OneToOne property, OneToOne oneToOne,
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SimpleIdBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SimpleIdBinder.java
index 2d7a664297..46cba4a6f5 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SimpleIdBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SimpleIdBinder.java
@@ -28,11 +28,17 @@ public class SimpleIdBinder {
     private final PropertyBinder propertyBinder;
     private final BasicValueIdCreator basicValueIdCreator;
 
-    public SimpleIdBinder(MetadataBuildingContext metadataBuildingContext, 
PersistentEntityNamingStrategy namingStrategy, JdbcEnvironment jdbcEnvironment, 
BasicValueIdCreator basicValueIdCreator)  {
+    public SimpleIdBinder(
+            MetadataBuildingContext metadataBuildingContext,
+            PersistentEntityNamingStrategy namingStrategy,
+            JdbcEnvironment jdbcEnvironment,
+            BasicValueIdCreator basicValueIdCreator,
+            SimpleValueBinder simpleValueBinder,
+            PropertyBinder propertyBinder)  {
         this.metadataBuildingContext = metadataBuildingContext;
         this.jdbcEnvironment = jdbcEnvironment;
-        this.simpleValueBinder = new SimpleValueBinder(namingStrategy);
-        this.propertyBinder = new PropertyBinder();
+        this.simpleValueBinder = simpleValueBinder;
+        this.propertyBinder = propertyBinder;
         this.basicValueIdCreator = basicValueIdCreator;
     }
 
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SimpleValueBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SimpleValueBinder.java
index d9b365e587..dcdb8b47ae 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SimpleValueBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SimpleValueBinder.java
@@ -4,6 +4,8 @@ import java.util.Optional;
 import java.util.Properties;
 
 import org.hibernate.id.enhanced.SequenceStyleGenerator;
+import org.hibernate.generator.Generator;
+import org.hibernate.generator.GeneratorCreationContext;
 import org.hibernate.mapping.BasicValue;
 import org.hibernate.mapping.Column;
 import org.hibernate.mapping.DependantValue;
@@ -19,32 +21,40 @@ import org.grails.orm.hibernate.cfg.Mapping;
 import org.grails.orm.hibernate.cfg.PersistentEntityNamingStrategy;
 import org.grails.orm.hibernate.cfg.PropertyConfig;
 import 
org.grails.orm.hibernate.cfg.domainbinding.generator.GrailsSequenceGeneratorEnum;
+import 
org.grails.orm.hibernate.cfg.domainbinding.generator.GrailsSequenceWrapper;
+import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
 
 public class SimpleValueBinder {
 
     private final PersistentEntityNamingStrategy namingStrategy;
     private final ColumnConfigToColumnBinder columnConfigToColumnBinder;
     private final ColumnBinder columnBinder;
+    private final JdbcEnvironment jdbcEnvironment;
+    private final GrailsSequenceWrapper grailsSequenceWrapper;
 
     private static final String SEQUENCE_KEY = 
GrailsSequenceGeneratorEnum.SEQUENCE.toString();
 
-    /**
-     * Convenience constructor for namingStrategy.
-     */
-    public SimpleValueBinder(PersistentEntityNamingStrategy namingStrategy) {
-        this(namingStrategy, new ColumnConfigToColumnBinder(), new 
ColumnBinder(namingStrategy));
-    }
-
     /**
      * Public constructor that accepts all collaborators.
      */
     public SimpleValueBinder(
             PersistentEntityNamingStrategy namingStrategy,
             ColumnConfigToColumnBinder columnConfigToColumnBinder,
-            ColumnBinder columnBinder) {
+            ColumnBinder columnBinder,
+            JdbcEnvironment jdbcEnvironment,
+            GrailsSequenceWrapper grailsSequenceWrapper) {
         this.namingStrategy = namingStrategy;
         this.columnConfigToColumnBinder = columnConfigToColumnBinder;
         this.columnBinder = columnBinder;
+        this.jdbcEnvironment = jdbcEnvironment;
+        this.grailsSequenceWrapper = grailsSequenceWrapper;
+    }
+
+    /**
+     * Convenience constructor for namingStrategy.
+     */
+    public SimpleValueBinder(PersistentEntityNamingStrategy namingStrategy, 
JdbcEnvironment jdbcEnvironment) {
+        this(namingStrategy, new ColumnConfigToColumnBinder(), new 
ColumnBinder(namingStrategy), jdbcEnvironment, new GrailsSequenceWrapper());
     }
 
     /**
@@ -54,6 +64,8 @@ public class SimpleValueBinder {
         this.namingStrategy = null;
         this.columnConfigToColumnBinder = null;
         this.columnBinder = null;
+        this.jdbcEnvironment = null;
+        this.grailsSequenceWrapper = null;
     }
 
     public void bindSimpleValue(
@@ -68,29 +80,7 @@ public class SimpleValueBinder {
 
         String generator = propertyConfig.getGenerator();
         if (generator != null && simpleValue instanceof BasicValue basicValue) 
{
-            Properties params = propertyConfig.getTypeParams();
-            final Properties generatorProps = new Properties();
-            if (params != null) {
-                generatorProps.putAll(params);
-            }
-
-            if (SEQUENCE_KEY.equals(generator) && 
generatorProps.containsKey(SEQUENCE_KEY)) {
-                generatorProps.put(SequenceStyleGenerator.SEQUENCE_PARAM, 
generatorProps.getProperty(SEQUENCE_KEY));
-            }
-
-            if 
(GrailsSequenceGeneratorEnum.IDENTITY.toString().equals(generator)) {
-                basicValue.setCustomIdGeneratorCreator(context -> {
-                    var gen = new org.hibernate.id.IdentityGenerator();
-                    
context.getProperty().getValue().getColumns().get(0).setIdentity(true);
-                    return gen;
-                });
-            } else if 
(GrailsSequenceGeneratorEnum.SEQUENCE.toString().equals(generator) || 
GrailsSequenceGeneratorEnum.SEQUENCE_IDENTITY.toString().equals(generator)) {
-                basicValue.setCustomIdGeneratorCreator(context -> {
-                    var gen = new 
org.hibernate.id.enhanced.SequenceStyleGenerator();
-                    gen.configure(context.getType(), generatorProps, 
context.getServiceRegistry());
-                    return gen;
-                });
-            }
+            basicValue.setCustomIdGeneratorCreator(context -> 
createGenerator(property, context, generator));
         }
 
         if (propertyConfig.isDerived() && !(property instanceof TenantId)) {
@@ -118,4 +108,8 @@ public class SimpleValueBinder {
         }
     }
 
+    private Generator createGenerator(GrailsHibernatePersistentProperty 
property, GeneratorCreationContext context, String generatorName) {
+        return grailsSequenceWrapper.getGenerator(generatorName, context, 
null, (GrailsHibernatePersistentEntity) property.getHibernateOwner(), 
jdbcEnvironment);
+    }
+
 }
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/VersionBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/VersionBinder.java
index cf8858b21f..45b3a08a91 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/VersionBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/VersionBinder.java
@@ -2,6 +2,7 @@ package org.grails.orm.hibernate.cfg.domainbinding.binder;
 
 import org.hibernate.boot.spi.MetadataBuildingContext;
 import org.hibernate.engine.OptimisticLockStyle;
+import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
 import org.hibernate.mapping.BasicValue;
 import org.hibernate.mapping.Property;
 import org.hibernate.mapping.RootClass;
@@ -21,14 +22,7 @@ public class VersionBinder {
     private final PropertyBinder propertyBinder;
     private final BiFunction<MetadataBuildingContext, Table, BasicValue> 
basicValueFactory;
 
-    public VersionBinder(MetadataBuildingContext metadataBuildingContext, 
PersistentEntityNamingStrategy namingStrategy) {
-        this(metadataBuildingContext,
-             new SimpleValueBinder(namingStrategy),
-             new PropertyBinder(),
-             BasicValue::new);
-    }
-
-    protected VersionBinder(MetadataBuildingContext metadataBuildingContext,
+    public VersionBinder(MetadataBuildingContext metadataBuildingContext,
                             SimpleValueBinder simpleValueBinder,
                             PropertyBinder propertyBinder,
                             BiFunction<MetadataBuildingContext, Table, 
BasicValue> basicValueFactory) {
@@ -38,6 +32,13 @@ public class VersionBinder {
         this.basicValueFactory = basicValueFactory;
     }
 
+    public VersionBinder(MetadataBuildingContext metadataBuildingContext, 
PersistentEntityNamingStrategy namingStrategy, JdbcEnvironment jdbcEnvironment) 
{
+        this(metadataBuildingContext,
+             new SimpleValueBinder(namingStrategy, jdbcEnvironment),
+             new PropertyBinder(),
+             BasicValue::new);
+    }
+
     public void bindVersion(GrailsHibernatePersistentProperty version, 
RootClass entity) {
 
         if (version != null) {
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 779dd7b8e4..b2e1ee3785 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
@@ -26,6 +26,7 @@ import org.hibernate.FetchMode;
 import org.hibernate.MappingException;
 import org.hibernate.boot.spi.InFlightMetadataCollector;
 import org.hibernate.boot.spi.MetadataBuildingContext;
+import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
 import org.hibernate.mapping.*;
 import org.hibernate.mapping.Collection;
 import org.hibernate.type.Type;
@@ -47,16 +48,45 @@ public class CollectionSecondPassBinder {
 
     private final MetadataBuildingContext metadataBuildingContext;
     private final PersistentEntityNamingStrategy namingStrategy;
+    private final JdbcEnvironment jdbcEnvironment;
     private final DefaultColumnNameFetcher defaultColumnNameFetcher;
     private final OrderByClauseBuilder orderByClauseBuilder;
-
-    public CollectionSecondPassBinder(MetadataBuildingContext 
metadataBuildingContext, PersistentEntityNamingStrategy namingStrategy) {
+    private final SimpleValueBinder simpleValueBinder;
+    private final EnumTypeBinder enumTypeBinder;
+    private final ManyToOneBinder manyToOneBinder;
+    private final CompositeIdentifierToManyToOneBinder 
compositeIdentifierToManyToOneBinder;
+    private final SimpleValueColumnFetcher simpleValueColumnFetcher;
+
+    public CollectionSecondPassBinder(
+            MetadataBuildingContext metadataBuildingContext,
+            PersistentEntityNamingStrategy namingStrategy,
+            JdbcEnvironment jdbcEnvironment,
+            SimpleValueBinder simpleValueBinder,
+            EnumTypeBinder enumTypeBinder,
+            ManyToOneBinder manyToOneBinder,
+            CompositeIdentifierToManyToOneBinder 
compositeIdentifierToManyToOneBinder,
+            SimpleValueColumnFetcher simpleValueColumnFetcher) {
         this.metadataBuildingContext = metadataBuildingContext;
         this.namingStrategy = namingStrategy;
+        this.jdbcEnvironment = jdbcEnvironment;
+        this.simpleValueBinder = simpleValueBinder;
+        this.enumTypeBinder = enumTypeBinder;
+        this.manyToOneBinder = manyToOneBinder;
+        this.compositeIdentifierToManyToOneBinder = 
compositeIdentifierToManyToOneBinder;
+        this.simpleValueColumnFetcher = simpleValueColumnFetcher;
         this.defaultColumnNameFetcher = new 
DefaultColumnNameFetcher(namingStrategy);
         this.orderByClauseBuilder = new OrderByClauseBuilder();
     }
 
+    public CollectionSecondPassBinder(MetadataBuildingContext 
metadataBuildingContext, PersistentEntityNamingStrategy namingStrategy, 
JdbcEnvironment jdbcEnvironment) {
+        this(metadataBuildingContext, namingStrategy, jdbcEnvironment,
+                new SimpleValueBinder(namingStrategy, jdbcEnvironment),
+                new EnumTypeBinder(),
+                new ManyToOneBinder(namingStrategy, jdbcEnvironment),
+                new CompositeIdentifierToManyToOneBinder(namingStrategy, 
jdbcEnvironment),
+                new SimpleValueColumnFetcher());
+    }
+
 
     public void bindCollectionSecondPass(HibernateToManyProperty property, 
@Nonnull InFlightMetadataCollector mappings,
                                          java.util.Map<?, ?> 
persistentClasses, Collection collection, String sessionFactoryBeanName) {
@@ -267,7 +297,7 @@ public class CollectionSecondPassBinder {
             }
 
             if (isEnum) {
-                new EnumTypeBinder().bindEnumType(property, referencedType, 
element, columnName);
+                enumTypeBinder.bindEnumType(property, referencedType, element, 
columnName);
             }
             else {
 
@@ -290,7 +320,7 @@ public class CollectionSecondPassBinder {
 
                 new SimpleValueColumnBinder().bindSimpleValue(element, 
typeName, columnName, true);
                 if (joinColumnMappingOptional.isPresent()) {
-                    Column column = new 
SimpleValueColumnFetcher().getColumnForSimpleValue(element);
+                    Column column = 
simpleValueColumnFetcher.getColumnForSimpleValue(element);
                     ColumnConfig columnConfig = 
joinColumnMappingOptional.get();
                     final PropertyConfig mappedForm = property.getMappedForm();
                     new 
ColumnConfigToColumnBinder().bindColumnConfigToColumn(column, columnConfig, 
mappedForm);
@@ -305,7 +335,7 @@ public class CollectionSecondPassBinder {
             }
             if (m != null && m.hasCompositeIdentifier()) {
                 CompositeIdentity ci = (CompositeIdentity) m.getIdentity();
-                new 
CompositeIdentifierToManyToOneBinder(namingStrategy).bindCompositeIdentifierToManyToOne(property,
 element, ci, domainClass, EMPTY_PATH);
+                
compositeIdentifierToManyToOneBinder.bindCompositeIdentifierToManyToOne(property,
 element, ci, domainClass, EMPTY_PATH);
             }
             else {
                 if (joinColumnMappingOptional.isPresent()) {
@@ -343,7 +373,7 @@ public class CollectionSecondPassBinder {
     }
 
     private void bindManyToMany(Association property, ManyToOne element) {
-        new ManyToOneBinder(namingStrategy).bindManyToOne(property, element, 
EMPTY_PATH);
+        manyToOneBinder.bindManyToOne(property, element, EMPTY_PATH);
         element.setReferencedEntityName(property.getOwner().getName());
     }
 
@@ -359,11 +389,11 @@ public class CollectionSecondPassBinder {
         boolean hasCompositeIdentifier = mapping != null && 
mapping.hasCompositeIdentifier();
         if (hasCompositeIdentifier && property.supportsJoinColumnMapping()) {
             CompositeIdentity ci = (CompositeIdentity) mapping.getIdentity();
-            new 
CompositeIdentifierToManyToOneBinder(namingStrategy).bindCompositeIdentifierToManyToOne(property,
 key, ci, refDomainClass, EMPTY_PATH);
+            
compositeIdentifierToManyToOneBinder.bindCompositeIdentifierToManyToOne(property,
 key, ci, refDomainClass, EMPTY_PATH);
         }
         else {
             // set type
-            new SimpleValueBinder(namingStrategy).bindSimpleValue(property, 
null, key, EMPTY_PATH);
+            simpleValueBinder.bindSimpleValue(property, null, key, EMPTY_PATH);
         }
     }
 
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/util/NamingStrategyWrapper.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/util/NamingStrategyWrapper.java
index d898c896d2..ba21d57d14 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/util/NamingStrategyWrapper.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/util/NamingStrategyWrapper.java
@@ -35,6 +35,10 @@ public class NamingStrategyWrapper implements 
PersistentEntityNamingStrategy {
         this.jdbcEnvironment = jdbcEnvironment;
     }
 
+    public JdbcEnvironment getJdbcEnvironment() {
+        return jdbcEnvironment;
+    }
+
     @Override
     public String resolveColumnName(String logicalName) {
         return Optional.ofNullable(logicalName)
diff --git 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/GrailsHibernatePersistentPropertySpec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/GrailsHibernatePersistentPropertySpec.groovy
index f8f4160070..646bfc6af7 100644
--- 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/GrailsHibernatePersistentPropertySpec.groovy
+++ 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/GrailsHibernatePersistentPropertySpec.groovy
@@ -7,6 +7,7 @@ import 
org.grails.orm.hibernate.cfg.domainbinding.util.NamingStrategyWrapper
 import spock.lang.Unroll
 import org.hibernate.mapping.Property
 import org.hibernate.mapping.ManyToOne
+import org.hibernate.mapping.Table
 
 class GrailsHibernatePersistentPropertySpec extends HibernateGormDatastoreSpec 
{
 
@@ -158,7 +159,7 @@ class GrailsHibernatePersistentPropertySpec extends 
HibernateGormDatastoreSpec {
         given:
         def domainBinder = getGrailsDomainBinder()
         def metadataBuildingContext = domainBinder.getMetadataBuildingContext()
-        def table = 
metadataBuildingContext.getMetadataCollector().addTable(null, null, "TEST", 
null, false, metadataBuildingContext)
+        def table = new Table("TEST")
         PersistentEntity entity = 
createPersistentEntity(TestEntityWithTypeName)
         GrailsHibernatePersistentProperty property = 
(GrailsHibernatePersistentProperty) entity.getPropertyByName("name")
         
@@ -173,7 +174,7 @@ class GrailsHibernatePersistentPropertySpec extends 
HibernateGormDatastoreSpec {
         given:
         def domainBinder = getGrailsDomainBinder()
         def metadataBuildingContext = domainBinder.getMetadataBuildingContext()
-        def table = 
metadataBuildingContext.getMetadataCollector().addTable(null, null, "TEST2", 
null, false, metadataBuildingContext)
+        def table = new Table("TEST2")
         PersistentEntity entity = createPersistentEntity(TestEntityWithEnum)
         GrailsHibernatePersistentProperty property = 
(GrailsHibernatePersistentProperty) entity.getPropertyByName("name")
         
@@ -187,7 +188,7 @@ class GrailsHibernatePersistentPropertySpec extends 
HibernateGormDatastoreSpec {
         given:
         def domainBinder = getGrailsDomainBinder()
         def metadataBuildingContext = domainBinder.getMetadataBuildingContext()
-        def table = 
metadataBuildingContext.getMetadataCollector().addTable(null, null, "TEST3", 
null, false, metadataBuildingContext)
+        def table = new Table("TEST3")
         PersistentEntity entity = createPersistentEntity(BMTOWLMAuthor)
         GrailsHibernatePersistentProperty property = 
(GrailsHibernatePersistentProperty) entity.getPropertyByName("books")
         
diff --git 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/CollectionSecondPassBinderSpec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/CollectionSecondPassBinderSpec.groovy
index 9b418c57b0..e1df39f439 100644
--- 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/CollectionSecondPassBinderSpec.groovy
+++ 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/CollectionSecondPassBinderSpec.groovy
@@ -23,7 +23,18 @@ class CollectionSecondPassBinderSpec extends 
HibernateGormDatastoreSpec {
         def collector = getCollector()
         def binder = getGrailsDomainBinder()
         def collectionBinder = binder.getCollectionBinder()
-        def collectionSecondPassBinder = new 
CollectionSecondPassBinder(binder.getMetadataBuildingContext(), 
binder.getNamingStrategy())
+        def namingStrategy = binder.getNamingStrategy()
+        def jdbcEnvironment = binder.getJdbcEnvironment()
+        def collectionSecondPassBinder = new CollectionSecondPassBinder(
+                binder.getMetadataBuildingContext(),
+                namingStrategy,
+                jdbcEnvironment,
+                new 
org.grails.orm.hibernate.cfg.domainbinding.binder.SimpleValueBinder(namingStrategy,
 jdbcEnvironment),
+                new 
org.grails.orm.hibernate.cfg.domainbinding.binder.EnumTypeBinder(),
+                new 
org.grails.orm.hibernate.cfg.domainbinding.binder.ManyToOneBinder(namingStrategy,
 jdbcEnvironment),
+                new 
org.grails.orm.hibernate.cfg.domainbinding.binder.CompositeIdentifierToManyToOneBinder(namingStrategy,
 jdbcEnvironment),
+                new 
org.grails.orm.hibernate.cfg.domainbinding.util.SimpleValueColumnFetcher()
+        )
 
         def authorEntity = getPersistentEntity(Author) as 
GrailsHibernatePersistentEntity
         def bookEntity = getPersistentEntity(Book) as 
GrailsHibernatePersistentEntity
diff --git 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ComponentPropertyBinderSpec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ComponentPropertyBinderSpec.groovy
index 7495a0d0e1..1189d3cfd1 100644
--- 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ComponentPropertyBinderSpec.groovy
+++ 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ComponentPropertyBinderSpec.groovy
@@ -21,7 +21,10 @@ import 
org.grails.orm.hibernate.cfg.domainbinding.binder.CollectionBinder
 import org.grails.orm.hibernate.cfg.domainbinding.binder.ComponentBinder
 import 
org.grails.orm.hibernate.cfg.domainbinding.binder.ComponentPropertyBinder
 import org.grails.orm.hibernate.cfg.domainbinding.binder.EnumTypeBinder
+import org.grails.orm.hibernate.cfg.domainbinding.binder.OneToOneBinder
+import org.grails.orm.hibernate.cfg.domainbinding.binder.ManyToOneBinder
 import org.grails.orm.hibernate.cfg.domainbinding.binder.SimpleValueBinder
+import 
org.grails.orm.hibernate.cfg.domainbinding.util.ColumnNameForPropertyAndPathFetcher
 import 
org.grails.orm.hibernate.cfg.domainbinding.collectionType.CollectionHolder
 import org.hibernate.boot.spi.InFlightMetadataCollector
 import org.hibernate.mapping.BasicValue
@@ -56,6 +59,9 @@ class ComponentPropertyBinderSpec extends 
HibernateGormDatastoreSpec {
     CollectionBinder collectionBinder = Mock(CollectionBinder)
     PropertyFromValueCreator propertyFromValueCreator = 
Mock(PropertyFromValueCreator)
     ComponentBinder componentBinder = Mock(ComponentBinder)
+    OneToOneBinder oneToOneBinder = Mock(OneToOneBinder)
+    ManyToOneBinder manyToOneBinder = Mock(ManyToOneBinder)
+    ColumnNameForPropertyAndPathFetcher columnNameFetcher = 
Mock(ColumnNameForPropertyAndPathFetcher)
 
     @Subject
     ComponentPropertyBinder binder
@@ -63,16 +69,22 @@ class ComponentPropertyBinderSpec extends 
HibernateGormDatastoreSpec {
     def mockSimpleValueBinder = Mock(SimpleValueBinder) // Mock 
SimpleValueBinder
 
     def setup() {
+        def jdbcEnvironment = 
Mock(org.hibernate.engine.jdbc.env.spi.JdbcEnvironment)
+        
         binder = new ComponentPropertyBinder(
                 getGrailsDomainBinder().getMetadataBuildingContext(),
                 namingStrategy,
+                jdbcEnvironment,
                 mappingCacheHolder,
                 collectionHolder,
                 enumTypeBinder,
                 collectionBinder,
                 propertyFromValueCreator,
                 componentBinder,
-                mockSimpleValueBinder 
+                mockSimpleValueBinder,
+                oneToOneBinder,
+                manyToOneBinder,
+                columnNameFetcher
         )
     }
 
@@ -215,6 +227,7 @@ class ComponentPropertyBinderSpec extends 
HibernateGormDatastoreSpec {
         
         namingStrategy.resolveColumnName("type") >> "type_col"
         namingStrategy.resolveColumnName("address") >> "address"
+        columnNameFetcher.getColumnNameForPropertyAndPath(currentGrailsProp, 
"address", null) >> "address_type_col"
         propertyFromValueCreator.createProperty(_ as BasicValue, 
currentGrailsProp) >> hibernateProperty
 
         when:
diff --git 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ListSecondPassBinderSpec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ListSecondPassBinderSpec.groovy
index 58b545f466..f8ceee2d9b 100644
--- 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ListSecondPassBinderSpec.groovy
+++ 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ListSecondPassBinderSpec.groovy
@@ -25,8 +25,18 @@ class ListSecondPassBinderSpec extends 
HibernateGormDatastoreSpec {
         def collector = getCollector()
         def binder = getGrailsDomainBinder()
         def collectionBinder = binder.getCollectionBinder()
-        def collectionSecondPassBinder = new 
CollectionSecondPassBinder(binder.getMetadataBuildingContext(), 
binder.getNamingStrategy())
         def namingStrategy = binder.getNamingStrategy()
+        def jdbcEnvironment = binder.getJdbcEnvironment()
+        def collectionSecondPassBinder = new CollectionSecondPassBinder(
+                binder.getMetadataBuildingContext(),
+                namingStrategy,
+                jdbcEnvironment,
+                new 
org.grails.orm.hibernate.cfg.domainbinding.binder.SimpleValueBinder(namingStrategy,
 jdbcEnvironment),
+                new 
org.grails.orm.hibernate.cfg.domainbinding.binder.EnumTypeBinder(),
+                new 
org.grails.orm.hibernate.cfg.domainbinding.binder.ManyToOneBinder(namingStrategy,
 jdbcEnvironment),
+                new 
org.grails.orm.hibernate.cfg.domainbinding.binder.CompositeIdentifierToManyToOneBinder(namingStrategy,
 jdbcEnvironment),
+                new 
org.grails.orm.hibernate.cfg.domainbinding.util.SimpleValueColumnFetcher()
+        )
         def listSecondPassBinder = new 
ListSecondPassBinder(binder.getMetadataBuildingContext(),namingStrategy, 
collectionSecondPassBinder)
 
         def authorEntity = getPersistentEntity(ListBinderAuthor) as 
GrailsHibernatePersistentEntity
diff --git 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/MapSecondPassBinderSpec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/MapSecondPassBinderSpec.groovy
index ba759da156..e4eccb37c9 100644
--- 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/MapSecondPassBinderSpec.groovy
+++ 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/MapSecondPassBinderSpec.groovy
@@ -25,7 +25,18 @@ class MapSecondPassBinderSpec extends 
HibernateGormDatastoreSpec {
         def collector = getCollector()
         def binder = getGrailsDomainBinder()
         def collectionBinder = binder.getCollectionBinder()
-        def collectionSecondPassBinder = new 
CollectionSecondPassBinder(binder.getMetadataBuildingContext(), 
binder.getNamingStrategy())
+        def namingStrategy = binder.getNamingStrategy()
+        def jdbcEnvironment = binder.getJdbcEnvironment()
+        def collectionSecondPassBinder = new CollectionSecondPassBinder(
+                binder.getMetadataBuildingContext(),
+                namingStrategy,
+                jdbcEnvironment,
+                new 
org.grails.orm.hibernate.cfg.domainbinding.binder.SimpleValueBinder(namingStrategy,
 jdbcEnvironment),
+                new 
org.grails.orm.hibernate.cfg.domainbinding.binder.EnumTypeBinder(),
+                new 
org.grails.orm.hibernate.cfg.domainbinding.binder.ManyToOneBinder(namingStrategy,
 jdbcEnvironment),
+                new 
org.grails.orm.hibernate.cfg.domainbinding.binder.CompositeIdentifierToManyToOneBinder(namingStrategy,
 jdbcEnvironment),
+                new 
org.grails.orm.hibernate.cfg.domainbinding.util.SimpleValueColumnFetcher()
+        )
         def mapSecondPassBinder = new 
MapSecondPassBinder(binder.getMetadataBuildingContext(), 
binder.getNamingStrategy(), collectionSecondPassBinder)
 
         def authorEntity = getPersistentEntity(MapAuthorBinder) as 
GrailsHibernatePersistentEntity
diff --git 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleValueBinderSpec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleValueBinderSpec.groovy
index 4399d9087b..8943e11823 100644
--- 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleValueBinderSpec.groovy
+++ 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleValueBinderSpec.groovy
@@ -29,10 +29,14 @@ class SimpleValueBinderSpec extends Specification {
     def namingStrategy = Mock(PersistentEntityNamingStrategy)
     def columnConfigToColumnBinder = Mock(ColumnConfigToColumnBinder)
     def columnBinder = Mock(ColumnBinder)
+    def jdbcEnvironment = 
Mock(org.hibernate.engine.jdbc.env.spi.JdbcEnvironment)
+    def grailsSequenceWrapper = 
Mock(org.grails.orm.hibernate.cfg.domainbinding.generator.GrailsSequenceWrapper)
 
     def binder = new SimpleValueBinder(namingStrategy,
             columnConfigToColumnBinder,
-            columnBinder)
+            columnBinder,
+            jdbcEnvironment,
+            grailsSequenceWrapper)
 
     def "sets type from provider when present and applies type params"() {
         given:
diff --git 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/VersionBinderSpec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/VersionBinderSpec.groovy
index 4e8c2ff408..8ea7cafb35 100644
--- 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/VersionBinderSpec.groovy
+++ 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/VersionBinderSpec.groovy
@@ -32,6 +32,7 @@ class VersionBinderSpec extends HibernateGormDatastoreSpec {
         simpleValueBinder = Mock(SimpleValueBinder)
         propertyBinder = Spy(PropertyBinder)
         basicValueFactory = Mock(BiFunction)
+        def jdbcEnvironment = 
Mock(org.hibernate.engine.jdbc.env.spi.JdbcEnvironment)
         
         versionBinder = new VersionBinder(metadataBuildingContext, 
simpleValueBinder, propertyBinder, basicValueFactory)
     }

Reply via email to