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 917fff9626799f39b1a7960161aef805df30785e Author: Walter Duque de Estrada <[email protected]> AuthorDate: Wed Feb 11 17:31:11 2026 -0600 Fix getRootMapping on GrailsHibernatePersistentEntity --- .../cfg/GrailsHibernatePersistentEntity.java | 24 ++++++---------------- .../secondpass/CollectionSecondPassBinder.java | 8 ++------ 2 files changed, 8 insertions(+), 24 deletions(-) diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsHibernatePersistentEntity.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsHibernatePersistentEntity.java index 29953dea35..c7d647f7f3 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsHibernatePersistentEntity.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsHibernatePersistentEntity.java @@ -3,19 +3,14 @@ package org.grails.orm.hibernate.cfg; import java.util.List; import java.util.Objects; import java.util.Optional; -import java.util.function.Function; import jakarta.annotation.Nonnull; -import org.hibernate.boot.model.naming.Identifier; -import org.hibernate.boot.model.relational.Database; -import org.hibernate.boot.model.relational.Namespace; import org.hibernate.boot.spi.InFlightMetadataCollector; import org.grails.datastore.mapping.model.PersistentEntity; import org.grails.datastore.mapping.model.PersistentProperty; import org.grails.datastore.mapping.model.config.GormProperties; -import org.grails.datastore.mapping.model.types.TenantId; import org.grails.orm.hibernate.cfg.domainbinding.ConfigureDerivedPropertiesConsumer; import org.grails.orm.hibernate.cfg.domainbinding.DefaultColumnNameFetcher; import org.grails.orm.hibernate.cfg.domainbinding.NamespaceNameExtractor; @@ -26,25 +21,18 @@ import org.grails.orm.hibernate.cfg.domainbinding.NamespaceNameExtractor; public interface GrailsHibernatePersistentEntity extends PersistentEntity { Mapping getMappedForm(); - default GrailsHibernatePersistentEntity getHibernateRootEntity() { - PersistentEntity root = getRootEntity(); - if (root instanceof GrailsHibernatePersistentEntity) { - return (GrailsHibernatePersistentEntity) root; - } - return null; + + @Nonnull default GrailsHibernatePersistentEntity getHibernateRootEntity() { + return (GrailsHibernatePersistentEntity) getRootEntity(); } default Mapping getRootMapping() { - GrailsHibernatePersistentEntity root = getHibernateRootEntity(); - if (root != null) { - return root.getMappedForm(); - } - return null; + return getHibernateRootEntity().getMappedForm(); } default boolean isTablePerHierarchySubclass() { - Mapping ownerMapping = getMappedForm(); - return !this.isRoot() && (ownerMapping == null || ownerMapping.getTablePerHierarchy()); + Mapping rootMapping = getRootMapping(); + return !this.isRoot() && (rootMapping == null || rootMapping.getTablePerHierarchy()); } @Override 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 9f05436121..24437f3369 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 @@ -23,7 +23,6 @@ import org.grails.orm.hibernate.cfg.domainbinding.SimpleValueColumnFetcher; import org.hibernate.FetchMode; import org.hibernate.MappingException; -import org.hibernate.boot.model.internal.BinderHelper; import org.hibernate.boot.spi.InFlightMetadataCollector; import org.hibernate.boot.spi.MetadataBuildingContext; import org.hibernate.mapping.*; @@ -91,10 +90,7 @@ public class CollectionSecondPassBinder { // Configure one-to-many if (collection.isOneToMany()) { - Mapping m = referenced != null ? referenced.getRootMapping() : null; - boolean tablePerSubclass = m != null && !m.getTablePerHierarchy(); - - if (referenced != null && !referenced.isRoot() && !tablePerSubclass) { + if (referenced != null && referenced.isTablePerHierarchySubclass()) { Mapping rootMapping = referenced.getRootMapping(); //TODO FIXME String discriminatorColumnName = JPA_DEFAULT_DISCRIMINATOR_TYPE; @@ -491,7 +487,7 @@ public class CollectionSecondPassBinder { discriminator = discriminatorConfig.getValue(); } } - Mapping rootMapping = domainClass != null ? domainClass.getRootMapping() : null; + Mapping rootMapping = domainClass.getHibernateRootEntity().getMappedForm(); String quote = "'"; if (rootMapping != null && rootMapping.getDatasources() != null) { DiscriminatorConfig discriminatorConfig = rootMapping.getDiscriminator();
