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()) {
