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 258bfe1107d4bce29ae46997491245ba4bef4569 Author: Walter Duque de Estrada <[email protected]> AuthorDate: Wed Feb 11 16:33:27 2026 -0600 ✦ refactored out RootMappingFetcher by: 1. Adding getRootMapping() as a default method to the GrailsHibernatePersistentEntity interface. 2. Replacing all usages of RootMappingFetcher in CollectionSecondPassBinder with calls to referenced.getRootMapping(). 3. Removing the now-obsolete RootMappingFetcher.java and its corresponding test RootMappingFetcherSpec.groovy. --- .../cfg/GrailsHibernatePersistentEntity.java | 21 ++++++++ .../cfg/GrailsHibernatePersistentProperty.java | 5 -- .../cfg/domainbinding/EnumTypeBinder.java | 2 +- .../cfg/domainbinding/RootMappingFetcher.java | 19 ------- .../secondpass/CollectionSecondPassBinder.java | 7 ++- .../GrailsHibernatePersistentPropertySpec.groovy | 13 ----- .../domainbinding/RootMappingFetcherSpec.groovy | 60 ---------------------- 7 files changed, 25 insertions(+), 102 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 46a291e088..29953dea35 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 @@ -26,6 +26,27 @@ 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; + } + + default Mapping getRootMapping() { + GrailsHibernatePersistentEntity root = getHibernateRootEntity(); + if (root != null) { + return root.getMappedForm(); + } + return null; + } + + default boolean isTablePerHierarchySubclass() { + Mapping ownerMapping = getMappedForm(); + return !this.isRoot() && (ownerMapping == null || ownerMapping.getTablePerHierarchy()); + } + @Override GrailsHibernatePersistentProperty getIdentity(); diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsHibernatePersistentProperty.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsHibernatePersistentProperty.java index 1c9f123f99..ba33ea79b1 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsHibernatePersistentProperty.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsHibernatePersistentProperty.java @@ -109,11 +109,6 @@ public interface GrailsHibernatePersistentProperty extends PersistentProperty<Pr return "serializable".equals(getTypeName()); } - default boolean isTablePerHierarchySubclass() { - Mapping ownerMapping = getHibernateOwner().getMappedForm(); - return !getHibernateOwner().isRoot() && (ownerMapping == null || ownerMapping.getTablePerHierarchy()); - } - default String getIndexColumnType(String defaultType) { diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/EnumTypeBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/EnumTypeBinder.java index 91292334de..7949a96643 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/EnumTypeBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/EnumTypeBinder.java @@ -66,7 +66,7 @@ public class EnumTypeBinder { simpleValue.setTypeParameters(enumProperties); Column column = new Column(); - boolean isTablePerHierarchySubclass = property.isTablePerHierarchySubclass(); + boolean isTablePerHierarchySubclass = property.getHibernateOwner().isTablePerHierarchySubclass(); if (isTablePerHierarchySubclass) { // Properties on subclasses in a table-per-hierarchy strategy must be nullable. if (LOG.isDebugEnabled()) { diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/RootMappingFetcher.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/RootMappingFetcher.java deleted file mode 100644 index ee75d0a3e9..0000000000 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/RootMappingFetcher.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.grails.orm.hibernate.cfg.domainbinding; - -import java.util.Optional; - -import org.grails.datastore.mapping.model.PersistentEntity; -import org.grails.orm.hibernate.cfg.GrailsHibernatePersistentEntity; -import org.grails.orm.hibernate.cfg.Mapping; - -public class RootMappingFetcher { - - public Mapping getRootMapping(PersistentEntity referenced) { - return Optional.ofNullable(referenced) - .map(PersistentEntity::getRootEntity) - .filter(GrailsHibernatePersistentEntity.class::isInstance) - .map(GrailsHibernatePersistentEntity.class::cast) - .map(GrailsHibernatePersistentEntity::getMappedForm) - .orElse(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 f55d2a1933..9f05436121 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 @@ -17,7 +17,6 @@ import org.grails.orm.hibernate.cfg.domainbinding.DefaultColumnNameFetcher; import org.grails.orm.hibernate.cfg.domainbinding.EnumTypeBinder; import org.grails.orm.hibernate.cfg.domainbinding.ManyToOneBinder; import org.grails.orm.hibernate.cfg.domainbinding.OrderByClauseBuilder; -import org.grails.orm.hibernate.cfg.domainbinding.RootMappingFetcher; import org.grails.orm.hibernate.cfg.domainbinding.SimpleValueBinder; import org.grails.orm.hibernate.cfg.domainbinding.SimpleValueColumnBinder; import org.grails.orm.hibernate.cfg.domainbinding.SimpleValueColumnFetcher; @@ -92,11 +91,11 @@ public class CollectionSecondPassBinder { // Configure one-to-many if (collection.isOneToMany()) { - Mapping m = new RootMappingFetcher().getRootMapping(referenced); + Mapping m = referenced != null ? referenced.getRootMapping() : null; boolean tablePerSubclass = m != null && !m.getTablePerHierarchy(); if (referenced != null && !referenced.isRoot() && !tablePerSubclass) { - Mapping rootMapping = new RootMappingFetcher().getRootMapping(referenced); + Mapping rootMapping = referenced.getRootMapping(); //TODO FIXME String discriminatorColumnName = JPA_DEFAULT_DISCRIMINATOR_TYPE; @@ -492,7 +491,7 @@ public class CollectionSecondPassBinder { discriminator = discriminatorConfig.getValue(); } } - Mapping rootMapping = new RootMappingFetcher().getRootMapping(domainClass); + Mapping rootMapping = domainClass != null ? domainClass.getRootMapping() : null; String quote = "'"; if (rootMapping != null && rootMapping.getDatasources() != null) { DiscriminatorConfig discriminatorConfig = rootMapping.getDiscriminator(); 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 a13f0bd918..663f194b0b 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 @@ -112,20 +112,7 @@ class GrailsHibernatePersistentPropertySpec extends HibernateGormDatastoreSpec { manyToOneProp.isHibernateManyToOne() } - void "test isTablePerHierarchySubclass"() { - given: - createPersistentEntity(BaseTPH) - PersistentEntity subTPH = createPersistentEntity(SubTPH) - createPersistentEntity(BaseTablePerClass) - PersistentEntity subTPC = createPersistentEntity(SubTablePerClass) - - GrailsHibernatePersistentProperty subTPHProp = (GrailsHibernatePersistentProperty) subTPH.getPropertyByName("subProp") - GrailsHibernatePersistentProperty subTPCProp = (GrailsHibernatePersistentProperty) subTPC.getPropertyByName("subProp") - expect: - subTPHProp.isTablePerHierarchySubclass() - !subTPCProp.isTablePerHierarchySubclass() - } @Unroll void "test isBidirectionalManyToOneWithListMapping for property #propertyName"() { diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/RootMappingFetcherSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/RootMappingFetcherSpec.groovy deleted file mode 100644 index 1c55b84786..0000000000 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/RootMappingFetcherSpec.groovy +++ /dev/null @@ -1,60 +0,0 @@ -package org.grails.orm.hibernate.cfg.domainbinding - -import org.grails.datastore.mapping.model.PersistentEntity -import org.grails.orm.hibernate.cfg.HibernatePersistentEntity -import org.grails.orm.hibernate.cfg.Mapping -import spock.lang.Specification - -class RootMappingFetcherSpec extends Specification { - - RootMappingFetcher fetcher = new RootMappingFetcher() - - void "test getRootMapping returns null for null input"() { - expect: - fetcher.getRootMapping(null) == null - } - - void "test getRootMapping returns null for non-HibernatePersistentEntity"() { - given: - PersistentEntity entity = Mock(PersistentEntity) - entity.getRootEntity() >> entity - - expect: - fetcher.getRootMapping(entity) == null - } - - void "test getRootMapping returns mapping for HibernatePersistentEntity"() { - given: - HibernatePersistentEntity entity = Mock(HibernatePersistentEntity) - Mapping mapping = new Mapping() - entity.getRootEntity() >> entity - entity.getMappedForm() >> mapping - - expect: - fetcher.getRootMapping(entity) == mapping - } - - void "test getRootMapping returns root mapping for child HibernatePersistentEntity"() { - given: - HibernatePersistentEntity root = Mock(HibernatePersistentEntity) - HibernatePersistentEntity child = Mock(HibernatePersistentEntity) - Mapping rootMapping = new Mapping() - - child.getRootEntity() >> root - root.getMappedForm() >> rootMapping - - expect: - fetcher.getRootMapping(child) == rootMapping - } - - void "test getRootMapping returns null if root is not HibernatePersistentEntity"() { - given: - HibernatePersistentEntity child = Mock(HibernatePersistentEntity) - PersistentEntity root = Mock(PersistentEntity) - - child.getRootEntity() >> root - - expect: - fetcher.getRootMapping(child) == null - } -}
