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 21c141068ba6a4be92391a828fb32db67bdc2fb9
Author: Walter Duque de Estrada <[email protected]>
AuthorDate: Sat Feb 7 11:33:09 2026 -0600

    Split class hierarchy
---
 .../cfg/domainbinding/CollectionBinder.java        |  6 +--
 .../domainbinding/secondpass/ListSecondPass.java   | 48 +++++++++++++++++++++-
 .../domainbinding/secondpass/MapSecondPass.java    | 47 ++++++++++++++++++++-
 ...econdPass.java => SetCollectionSecondPass.java} | 15 ++++---
 4 files changed, 101 insertions(+), 15 deletions(-)

diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/CollectionBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/CollectionBinder.java
index b9b25a9d4c..ac73b9a9b6 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/CollectionBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/CollectionBinder.java
@@ -13,7 +13,7 @@ import 
org.grails.orm.hibernate.cfg.PersistentEntityNamingStrategy;
 import org.grails.orm.hibernate.cfg.PropertyConfig;
 import org.grails.orm.hibernate.cfg.ColumnConfig;
 import org.grails.orm.hibernate.cfg.JoinTable;
-import 
org.grails.orm.hibernate.cfg.domainbinding.secondpass.GrailsCollectionSecondPass;
+import 
org.grails.orm.hibernate.cfg.domainbinding.secondpass.SetCollectionSecondPass;
 import org.grails.orm.hibernate.cfg.domainbinding.secondpass.ListSecondPass;
 import org.grails.orm.hibernate.cfg.domainbinding.secondpass.MapSecondPass;
 import org.hibernate.FetchMode;
@@ -114,7 +114,7 @@ public class CollectionBinder {
 
         // set up second pass
         if (collection instanceof org.hibernate.mapping.Set) {
-            mappings.addSecondPass(new 
GrailsCollectionSecondPass(grailsDomainBinder, this, property, mappings, 
collection, sessionFactoryBeanName));
+            mappings.addSecondPass(new 
SetCollectionSecondPass(grailsDomainBinder, this, property, mappings, 
collection, sessionFactoryBeanName));
         }
         else if (collection instanceof org.hibernate.mapping.List) {
             mappings.addSecondPass(new ListSecondPass(grailsDomainBinder, 
this, listSecondPassBinder, property, mappings, collection, 
sessionFactoryBeanName));
@@ -123,7 +123,7 @@ public class CollectionBinder {
             mappings.addSecondPass(new MapSecondPass(grailsDomainBinder, this, 
mapSecondPassBinder, property, mappings, collection, sessionFactoryBeanName));
         }
         else { // Collection -> Bag
-            mappings.addSecondPass(new 
GrailsCollectionSecondPass(grailsDomainBinder, this, property, mappings, 
collection, sessionFactoryBeanName));
+            mappings.addSecondPass(new 
SetCollectionSecondPass(grailsDomainBinder, this, property, mappings, 
collection, sessionFactoryBeanName));
         }
     }
 
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 39fe7708cd..f60afd15af 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
@@ -1,5 +1,6 @@
 package org.grails.orm.hibernate.cfg.domainbinding.secondpass;
 
+import java.util.Iterator;
 import java.util.Map;
 
 import jakarta.annotation.Nonnull;
@@ -7,21 +8,36 @@ import jakarta.annotation.Nonnull;
 import org.hibernate.MappingException;
 import org.hibernate.boot.spi.InFlightMetadataCollector;
 import org.hibernate.mapping.Collection;
+import org.hibernate.mapping.IndexedCollection;
+import org.hibernate.mapping.OneToMany;
+import org.hibernate.mapping.Selectable;
+import org.hibernate.mapping.Value;
 
 import org.grails.orm.hibernate.cfg.GrailsDomainBinder;
 import org.grails.orm.hibernate.cfg.HibernateToManyProperty;
 import org.grails.orm.hibernate.cfg.domainbinding.CollectionBinder;
 import org.grails.orm.hibernate.cfg.domainbinding.ListSecondPassBinder;
 
-public class ListSecondPass extends GrailsCollectionSecondPass {
+public class ListSecondPass implements org.hibernate.boot.spi.SecondPass {
     private static final long serialVersionUID = -3024674993774205193L;
 
+    protected final GrailsDomainBinder grailsDomainBinder;
+    protected final CollectionBinder collectionBinder;
     private final ListSecondPassBinder listSecondPassBinder;
+    protected final HibernateToManyProperty property;
+    protected final @Nonnull InFlightMetadataCollector mappings;
+    protected final Collection collection;
+    protected final String sessionFactoryBeanName;
 
     public ListSecondPass(GrailsDomainBinder grailsDomainBinder, 
CollectionBinder collectionBinder, ListSecondPassBinder listSecondPassBinder, 
HibernateToManyProperty property, @Nonnull InFlightMetadataCollector mappings,
                           Collection coll, String sessionFactoryBeanName) {
-        super(grailsDomainBinder, collectionBinder, property, mappings, coll, 
sessionFactoryBeanName);
+        this.grailsDomainBinder = grailsDomainBinder;
+        this.collectionBinder = collectionBinder;
         this.listSecondPassBinder = listSecondPassBinder;
+        this.property = property;
+        this.mappings = mappings;
+        this.collection = coll;
+        this.sessionFactoryBeanName = sessionFactoryBeanName;
     }
 
 
@@ -33,4 +49,32 @@ public class ListSecondPass extends 
GrailsCollectionSecondPass {
                 (org.hibernate.mapping.List) collection, 
sessionFactoryBeanName);
         createCollectionKeys();
     }
+
+    protected void createCollectionKeys() {
+        collection.createAllKeys();
+
+        if (GrailsDomainBinder.LOG.isDebugEnabled()) {
+            String msg = "Mapped collection key: " + 
columns(collection.getKey());
+            if (collection.isIndexed())
+                msg += ", index: " + columns(((IndexedCollection) 
collection).getIndex());
+            if (collection.isOneToMany()) {
+                msg += ", one-to-many: "
+                        + ((OneToMany) 
collection.getElement()).getReferencedEntityName();
+            } else {
+                msg += ", element: " + columns(collection.getElement());
+            }
+            GrailsDomainBinder.LOG.debug(msg);
+        }
+    }
+
+    protected String columns(Value val) {
+        StringBuilder columns = new StringBuilder();
+        Iterator<?> iter = val.getColumns().iterator();
+        while (iter.hasNext()) {
+            columns.append(((Selectable) iter.next()).getText());
+            if (iter.hasNext()) columns.append(", ");
+        }
+        return columns.toString();
+    }
 }
+
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/MapSecondPass.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/MapSecondPass.java
index d7d692be53..0215fbc370 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/MapSecondPass.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/MapSecondPass.java
@@ -1,5 +1,6 @@
 package org.grails.orm.hibernate.cfg.domainbinding.secondpass;
 
+import java.util.Iterator;
 import java.util.Map;
 
 import jakarta.annotation.Nonnull;
@@ -7,21 +8,36 @@ import jakarta.annotation.Nonnull;
 import org.hibernate.MappingException;
 import org.hibernate.boot.spi.InFlightMetadataCollector;
 import org.hibernate.mapping.Collection;
+import org.hibernate.mapping.IndexedCollection;
+import org.hibernate.mapping.OneToMany;
+import org.hibernate.mapping.Selectable;
+import org.hibernate.mapping.Value;
 
 import org.grails.orm.hibernate.cfg.GrailsDomainBinder;
 import org.grails.orm.hibernate.cfg.HibernateToManyProperty;
 import org.grails.orm.hibernate.cfg.domainbinding.CollectionBinder;
 import org.grails.orm.hibernate.cfg.domainbinding.MapSecondPassBinder;
 
-public class MapSecondPass extends GrailsCollectionSecondPass {
+public class MapSecondPass implements org.hibernate.boot.spi.SecondPass {
     private static final long serialVersionUID = -3244991685626409031L;
 
+    protected final GrailsDomainBinder grailsDomainBinder;
+    protected final CollectionBinder collectionBinder;
     private final MapSecondPassBinder mapSecondPassBinder;
+    protected final HibernateToManyProperty property;
+    protected final @Nonnull InFlightMetadataCollector mappings;
+    protected final Collection collection;
+    protected final String sessionFactoryBeanName;
 
     public MapSecondPass(GrailsDomainBinder grailsDomainBinder, 
CollectionBinder collectionBinder, MapSecondPassBinder mapSecondPassBinder, 
HibernateToManyProperty property, @Nonnull InFlightMetadataCollector mappings,
                          Collection coll, String sessionFactoryBeanName) {
-        super(grailsDomainBinder, collectionBinder, property, mappings, coll, 
sessionFactoryBeanName);
+        this.grailsDomainBinder = grailsDomainBinder;
+        this.collectionBinder = collectionBinder;
         this.mapSecondPassBinder = mapSecondPassBinder;
+        this.property = property;
+        this.mappings = mappings;
+        this.collection = coll;
+        this.sessionFactoryBeanName = sessionFactoryBeanName;
     }
 
 
@@ -34,4 +50,31 @@ public class MapSecondPass extends 
GrailsCollectionSecondPass {
                 (org.hibernate.mapping.Map) collection, 
sessionFactoryBeanName);
         createCollectionKeys();
     }
+
+    protected void createCollectionKeys() {
+        collection.createAllKeys();
+
+        if (GrailsDomainBinder.LOG.isDebugEnabled()) {
+            String msg = "Mapped collection key: " + 
columns(collection.getKey());
+            if (collection.isIndexed())
+                msg += ", index: " + columns(((IndexedCollection) 
collection).getIndex());
+            if (collection.isOneToMany()) {
+                msg += ", one-to-many: "
+                        + ((OneToMany) 
collection.getElement()).getReferencedEntityName();
+            } else {
+                msg += ", element: " + columns(collection.getElement());
+            }
+            GrailsDomainBinder.LOG.debug(msg);
+        }
+    }
+
+    protected String columns(Value val) {
+        StringBuilder columns = new StringBuilder();
+        Iterator<?> iter = val.getColumns().iterator();
+        while (iter.hasNext()) {
+            columns.append(((Selectable) iter.next()).getText());
+            if (iter.hasNext()) columns.append(", ");
+        }
+        return columns.toString();
+    }
 }
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/GrailsCollectionSecondPass.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/SetCollectionSecondPass.java
similarity index 87%
rename from 
grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/GrailsCollectionSecondPass.java
rename to 
grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/SetCollectionSecondPass.java
index ad3c79b427..e1c3d1b8ff 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/GrailsCollectionSecondPass.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/SetCollectionSecondPass.java
@@ -24,19 +24,18 @@ import 
org.grails.orm.hibernate.cfg.domainbinding.CollectionBinder;
  *
  * @author Graeme
  */
-public class GrailsCollectionSecondPass implements 
org.hibernate.boot.spi.SecondPass {
+public class SetCollectionSecondPass implements 
org.hibernate.boot.spi.SecondPass {
 
     private static final long serialVersionUID = -5540526942092611348L;
 
     protected final GrailsDomainBinder grailsDomainBinder;
     protected final CollectionBinder collectionBinder;
-    HibernateToManyProperty property;
-    @Nonnull
-    InFlightMetadataCollector mappings;
-    Collection collection;
-    String sessionFactoryBeanName;
+    protected final HibernateToManyProperty property;
+    protected final @Nonnull InFlightMetadataCollector mappings;
+    protected final Collection collection;
+    protected final String sessionFactoryBeanName;
 
-    public GrailsCollectionSecondPass(GrailsDomainBinder grailsDomainBinder,
+    public SetCollectionSecondPass(GrailsDomainBinder grailsDomainBinder,
                                       CollectionBinder collectionBinder,
                                       HibernateToManyProperty property,
                                       @Nonnull InFlightMetadataCollector 
mappings,
@@ -69,7 +68,7 @@ public class GrailsCollectionSecondPass implements 
org.hibernate.boot.spi.Second
         }
     }
 
-    private String columns(Value val) {
+    protected String columns(Value val) {
         StringBuilder columns = new StringBuilder();
         Iterator<?> iter = val.getColumns().iterator();
         while (iter.hasNext()) {

Reply via email to