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 9c8ba25a0abb8d2cd52226ad65558e515d5074ae Author: Walter Duque de Estrada <[email protected]> AuthorDate: Sat Feb 7 11:57:35 2026 -0600 remove duplication of SecondPass --- .../cfg/domainbinding/CollectionBinder.java | 23 +----- .../domainbinding/secondpass/GrailsSecondPass.java | 10 +++ .../domainbinding/secondpass/ListSecondPass.java | 31 +------- .../domainbinding/secondpass/MapSecondPass.java | 31 +------- .../secondpass/SetCollectionSecondPass.java | 86 ---------------------- .../domainbinding/secondpass/SetSecondPass.java | 53 +++++++++++++ 6 files changed, 75 insertions(+), 159 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 ac73b9a9b6..c37805d35d 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 @@ -1,45 +1,30 @@ package org.grails.orm.hibernate.cfg.domainbinding; import jakarta.annotation.Nonnull; -import org.grails.datastore.mapping.model.PersistentEntity; + import org.grails.datastore.mapping.model.PersistentProperty; import org.grails.orm.hibernate.cfg.GrailsDomainBinder; import org.grails.orm.hibernate.cfg.GrailsHibernatePersistentEntity; -import org.grails.orm.hibernate.cfg.GrailsHibernatePersistentProperty; import org.grails.orm.hibernate.cfg.GrailsHibernateUtil; import org.grails.orm.hibernate.cfg.HibernateToManyProperty; -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.ColumnConfig; import org.grails.orm.hibernate.cfg.JoinTable; -import org.grails.orm.hibernate.cfg.domainbinding.secondpass.SetCollectionSecondPass; +import org.grails.orm.hibernate.cfg.domainbinding.secondpass.SetSecondPass; import org.grails.orm.hibernate.cfg.domainbinding.secondpass.ListSecondPass; import org.grails.orm.hibernate.cfg.domainbinding.secondpass.MapSecondPass; import org.hibernate.FetchMode; -import org.hibernate.MappingException; import org.hibernate.boot.spi.InFlightMetadataCollector; import org.hibernate.boot.spi.MetadataBuildingContext; -import org.hibernate.mapping.BasicValue; import org.hibernate.mapping.Collection; -import org.hibernate.mapping.Column; -import org.hibernate.mapping.Component; -import org.hibernate.mapping.IndexedCollection; import org.hibernate.mapping.OneToMany; import org.hibernate.mapping.PersistentClass; -import org.hibernate.mapping.Property; -import org.hibernate.mapping.SimpleValue; import org.hibernate.mapping.Table; -import org.hibernate.mapping.Value; -import org.hibernate.type.StandardBasicTypes; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.List; import java.util.Map; -import static org.grails.orm.hibernate.cfg.GrailsDomainBinder.*; - /** * Handles the binding of collections to the Hibernate runtime meta model. */ @@ -114,7 +99,7 @@ public class CollectionBinder { // set up second pass if (collection instanceof org.hibernate.mapping.Set) { - mappings.addSecondPass(new SetCollectionSecondPass(grailsDomainBinder, this, property, mappings, collection, sessionFactoryBeanName)); + mappings.addSecondPass(new SetSecondPass(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 +108,7 @@ public class CollectionBinder { mappings.addSecondPass(new MapSecondPass(grailsDomainBinder, this, mapSecondPassBinder, property, mappings, collection, sessionFactoryBeanName)); } else { // Collection -> Bag - mappings.addSecondPass(new SetCollectionSecondPass(grailsDomainBinder, this, property, mappings, collection, sessionFactoryBeanName)); + mappings.addSecondPass(new SetSecondPass(grailsDomainBinder, this, property, mappings, collection, sessionFactoryBeanName)); } } diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/GrailsSecondPass.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/GrailsSecondPass.java new file mode 100644 index 0000000000..f024348c5a --- /dev/null +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/GrailsSecondPass.java @@ -0,0 +1,10 @@ +package org.grails.orm.hibernate.cfg.domainbinding.secondpass; + +import org.hibernate.mapping.Collection; + +public interface GrailsSecondPass { + + default void createCollectionKeys(Collection collection) { + collection.createAllKeys(); + } +} 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 f60afd15af..2bc3df5705 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.io.Serial; import java.util.Iterator; import java.util.Map; @@ -18,7 +19,8 @@ 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 implements org.hibernate.boot.spi.SecondPass { +public class ListSecondPass implements org.hibernate.boot.spi.SecondPass, GrailsSecondPass { + @Serial private static final long serialVersionUID = -3024674993774205193L; protected final GrailsDomainBinder grailsDomainBinder; @@ -47,34 +49,9 @@ public class ListSecondPass implements org.hibernate.boot.spi.SecondPass { collectionBinder.bindCollectionSecondPass(property, mappings, persistentClasses, collection, sessionFactoryBeanName); listSecondPassBinder.bindListSecondPass(property, mappings, persistentClasses, (org.hibernate.mapping.List) collection, sessionFactoryBeanName); - createCollectionKeys(); + createCollectionKeys(collection); } - 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 0215fbc370..31ff7dc83b 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.io.Serial; import java.util.Iterator; import java.util.Map; @@ -18,7 +19,8 @@ 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 implements org.hibernate.boot.spi.SecondPass { +public class MapSecondPass implements org.hibernate.boot.spi.SecondPass, GrailsSecondPass { + @Serial private static final long serialVersionUID = -3244991685626409031L; protected final GrailsDomainBinder grailsDomainBinder; @@ -48,33 +50,8 @@ public class MapSecondPass implements org.hibernate.boot.spi.SecondPass { collectionBinder.bindCollectionSecondPass(property, mappings, persistentClasses, collection, sessionFactoryBeanName); mapSecondPassBinder.bindMapSecondPass(property, mappings, persistentClasses, (org.hibernate.mapping.Map) collection, sessionFactoryBeanName); - createCollectionKeys(); + createCollectionKeys(collection); } - 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/SetCollectionSecondPass.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/SetCollectionSecondPass.java deleted file mode 100644 index e1c3d1b8ff..0000000000 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/SetCollectionSecondPass.java +++ /dev/null @@ -1,86 +0,0 @@ -package org.grails.orm.hibernate.cfg.domainbinding.secondpass; - -import java.util.Iterator; -import java.util.Map; - -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; - -/** - * Second pass class for grails relationships. This is required as all - * persistent classes need to be loaded in the first pass and then relationships - * established in the second pass compile - * - * @author Graeme - */ -public class SetCollectionSecondPass implements org.hibernate.boot.spi.SecondPass { - - private static final long serialVersionUID = -5540526942092611348L; - - protected final GrailsDomainBinder grailsDomainBinder; - protected final CollectionBinder collectionBinder; - protected final HibernateToManyProperty property; - protected final @Nonnull InFlightMetadataCollector mappings; - protected final Collection collection; - protected final String sessionFactoryBeanName; - - public SetCollectionSecondPass(GrailsDomainBinder grailsDomainBinder, - CollectionBinder collectionBinder, - HibernateToManyProperty property, - @Nonnull InFlightMetadataCollector mappings, - Collection coll, - String sessionFactoryBeanName) { - this.grailsDomainBinder = grailsDomainBinder; - this.collectionBinder = collectionBinder; - this.property = property; - this.mappings = mappings; - this.collection = coll; - this.sessionFactoryBeanName = sessionFactoryBeanName; - } - - - - 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(); - } - - @SuppressWarnings("rawtypes") - public void doSecondPass(Map persistentClasses) throws MappingException { - collectionBinder.bindCollectionSecondPass(property, mappings, persistentClasses, collection, sessionFactoryBeanName); - createCollectionKeys(); - } -} diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/SetSecondPass.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/SetSecondPass.java new file mode 100644 index 0000000000..2154bd44e9 --- /dev/null +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/SetSecondPass.java @@ -0,0 +1,53 @@ +package org.grails.orm.hibernate.cfg.domainbinding.secondpass; + +import java.util.Map; + +import jakarta.annotation.Nonnull; + +import org.hibernate.MappingException; +import org.hibernate.boot.spi.InFlightMetadataCollector; +import org.hibernate.mapping.Collection; + +import org.grails.orm.hibernate.cfg.GrailsDomainBinder; +import org.grails.orm.hibernate.cfg.HibernateToManyProperty; +import org.grails.orm.hibernate.cfg.domainbinding.CollectionBinder; + +/** + * Second pass class for grails relationships. This is required as all + * persistent classes need to be loaded in the first pass and then relationships + * established in the second pass compile + * + * @author Graeme + */ +public class SetSecondPass implements org.hibernate.boot.spi.SecondPass, GrailsSecondPass { + + private static final long serialVersionUID = -5540526942092611348L; + + protected final GrailsDomainBinder grailsDomainBinder; + protected final CollectionBinder collectionBinder; + protected final HibernateToManyProperty property; + protected final @Nonnull InFlightMetadataCollector mappings; + protected final Collection collection; + protected final String sessionFactoryBeanName; + + public SetSecondPass(GrailsDomainBinder grailsDomainBinder, + CollectionBinder collectionBinder, + HibernateToManyProperty property, + @Nonnull InFlightMetadataCollector mappings, + Collection coll, + String sessionFactoryBeanName) { + this.grailsDomainBinder = grailsDomainBinder; + this.collectionBinder = collectionBinder; + this.property = property; + this.mappings = mappings; + this.collection = coll; + this.sessionFactoryBeanName = sessionFactoryBeanName; + } + + + @SuppressWarnings("rawtypes") + public void doSecondPass(Map persistentClasses) throws MappingException { + collectionBinder.bindCollectionSecondPass(property, mappings, persistentClasses, collection, sessionFactoryBeanName); + createCollectionKeys(collection); + } +}
