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
-    }
-}

Reply via email to