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 1096dd6b289b9a50dfa463e97368e82a5e613390
Author: Walter B Duque de Estrada <[email protected]>
AuthorDate: Sun Jan 25 17:48:23 2026 -0600

    I have refactored the Hibernate 7 module to remove the need for 
HibernateEntityWrapper by introducing a more direct way to access the mapped 
form of an entity through the PersistentEntity hierarchy.
    
      Key changes:
       - `grails-datastore-core`:
           - Added a default method getMappedForm() to the PersistentEntity 
interface, providing a common contract for retrieving the underlying mapping.
           - Made EmbeddedPersistentEntity generic (EmbeddedPersistentEntity<T 
extends Entity>), allowing it to correctly propagate mapping type information.
       - `hibernate7` module:
           - Updated HibernatePersistentEntity and 
HibernateEmbeddedPersistentEntity to specify Mapping as their generic type.
           - Refactored GrailsDomainBinder.getMapping(PersistentEntity) to 
utilize the new getMappedForm() method, falling back to the mapping cache if 
necessary.
           - Replaced all 13 occurrences of HibernateEntityWrapper in 
GrailsDomainBinder with direct calls to getMapping(domainClass).
           - Refactored TableNameFetcher, SimpleIdBinder, EnumTypeBinder, 
CascadeBehaviorFetcher, ManyToOneBinder, SimpleValueBinder, and ColumnBinder to 
eliminate dependencies on HibernateEntityWrapper.
           - Deleted the now-obsolete HibernateEntityWrapper.java and its 
corresponding test spec.
           - Updated all relevant test specifications to use the refactored 
mapping retrieval logic.
    
      These changes ensure a cleaner architectural integration between the core 
datastore and the Hibernate-specific implementation while maintaining full 
compatibility across the module hierarchy. All
      relevant tests have been verified.
---
 .../orm/hibernate/cfg/GrailsDomainBinder.java      |  54 ++++---
 .../cfg/HibernateEmbeddedPersistentEntity.java     |  46 ++++++
 .../orm/hibernate/cfg/HibernateMappingContext.java |  38 -----
 .../cfg/domainbinding/CascadeBehaviorFetcher.java  |   3 +-
 .../hibernate/cfg/domainbinding/ColumnBinder.java  |   7 +-
 .../ColumnNameForPropertyAndPathFetcher.java       |   4 -
 .../cfg/domainbinding/EnumTypeBinder.java          |   3 +-
 .../cfg/domainbinding/HibernateEntityWrapper.java  |  31 ----
 .../cfg/domainbinding/ManyToOneBinder.java         |   9 +-
 .../cfg/domainbinding/SimpleIdBinder.java          |   8 +-
 .../cfg/domainbinding/SimpleValueBinder.java       |   7 +-
 .../cfg/domainbinding/TableNameFetcher.java        |  10 +-
 .../grails/orm/hibernate/cfg/MappingSpec.groovy    |   3 +-
 .../cfg/domainbinding/ColumnBinderSpec.groovy      |  32 +----
 .../ColumnNameForPropertyAndPathFetcherSpec.groovy |   8 --
 .../HibernateEntityWrapperSpec.groovy              | 158 ---------------------
 .../cfg/domainbinding/ManyToOneBinderSpec.groovy   |  32 ++---
 .../cfg/domainbinding/SimpleIdBinderSpec.groovy    |  26 ++--
 .../cfg/domainbinding/SimpleValueBinderSpec.groovy |  12 +-
 .../cfg/domainbinding/TableNameFetcherSpec.groovy  |   9 +-
 .../mapping/model/AbstractPersistentEntity.java    |   2 +
 .../mapping/model/EmbeddedPersistentEntity.java    |   3 +-
 .../datastore/mapping/model/PersistentEntity.java  |   9 ++
 23 files changed, 149 insertions(+), 365 deletions(-)

diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java
index 29c0290983..649a3d6389 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java
@@ -183,7 +183,12 @@ public class GrailsDomainBinder
      * @return A Mapping object or null
      */
     public static Mapping getMapping(PersistentEntity domainClass) {
-        return domainClass == null ? null : 
MAPPING_CACHE.get(domainClass.getJavaClass());
+        if (domainClass == null) return null;
+        org.grails.datastore.mapping.config.Entity mappedForm = 
domainClass.getMappedForm();
+        if (mappedForm instanceof Mapping) {
+            return (Mapping) mappedForm;
+        }
+        return MAPPING_CACHE.get(domainClass.getJavaClass());
     }
 
     public static void clearMappingCache() {
@@ -325,7 +330,7 @@ public class GrailsDomainBinder
             SimpleValue elt = new BasicValue(metadataBuildingContext, 
map.getCollectionTable());
             map.setElement(elt);
 
-            Mapping mapping = new 
HibernateEntityWrapper().getMappedForm(property.getOwner());
+            Mapping mapping = getMapping(property.getOwner());
             String typeName = new TypeNameProvider().getTypeName(property, 
mapping);
             if (typeName == null ) {
 
@@ -777,7 +782,7 @@ public class GrailsDomainBinder
             }
             else {
 
-                Mapping mapping =  new 
HibernateEntityWrapper().getMappedForm(property.getOwner());;
+                Mapping mapping =  getMapping(property.getOwner());;
                 String typeName = new TypeNameProvider().getTypeName(property, 
mapping);
                 if (typeName == null) {
                     Type type = 
mappings.getTypeConfiguration().getBasicTypeRegistry().getRegisteredType(className);
@@ -801,7 +806,7 @@ public class GrailsDomainBinder
         } else {
             final PersistentEntity domainClass = 
property.getAssociatedEntity();
 
-            Mapping m = new 
HibernateEntityWrapper().getMappedForm(domainClass);
+            Mapping m = getMapping(domainClass);
             if (m.hasCompositeIdentifier()) {
                 CompositeIdentity ci = (CompositeIdentity) m.getIdentity();
                 new 
CompositeIdentifierToManyToOneBinder(namingStrategy).bindCompositeIdentifierToManyToOne(property,
 element, ci, domainClass, EMPTY_PATH);
@@ -861,7 +866,7 @@ public class GrailsDomainBinder
         }
 
         PersistentEntity refDomainClass = property.getOwner();
-        final Mapping mapping = new 
HibernateEntityWrapper().getMappedForm(refDomainClass);
+        final Mapping mapping = getMapping(refDomainClass);
         boolean hasCompositeIdentifier = mapping.hasCompositeIdentifier();
         if ((new ShouldCollectionBindWithJoinColumn().apply((ToMany) property) 
&& hasCompositeIdentifier) ||
                 (hasCompositeIdentifier && ( property instanceof ManyToMany))) 
{
@@ -1137,7 +1142,7 @@ public class GrailsDomainBinder
     public void evaluateMapping(PersistentEntity persistentEntity) {
         Optional.ofNullable(persistentEntity).ifPresent(domainClass -> {
             try {
-                final Mapping m = new 
HibernateEntityWrapper().getMappedForm(domainClass);
+                final Mapping m = getMapping(domainClass);
                 for (PersistentProperty property : 
domainClass.getPersistentProperties()) {
                     PropertyConfig propConf = 
m.getPropertyConfig(property.getName());
 
@@ -1180,7 +1185,7 @@ public class GrailsDomainBinder
             root.setPolymorphic(false);
         } else {
             root.setPolymorphic(true);
-            Mapping m = new HibernateEntityWrapper().getMappedForm(entity);
+            Mapping m = getMapping(entity);
             boolean tablePerSubclass = !m.getTablePerHierarchy();
             if (!tablePerSubclass) {
                 // if the root class has children create a discriminator 
property
@@ -1296,7 +1301,7 @@ public class GrailsDomainBinder
             // set the descriminator value as the name of the class. This is 
the
             // value used by Hibernate to decide what the type of the class is
             // to perform polymorphic queries
-            Mapping subMapping = new 
HibernateEntityWrapper().getMappedForm(sub);
+            Mapping subMapping = getMapping(sub);
             DiscriminatorConfig discriminatorConfig = 
subMapping.getDiscriminator();
 
             subClass.setDiscriminatorValue(discriminatorConfig != null && 
discriminatorConfig.getValue() != null ? discriminatorConfig.getValue() : 
fullName);
@@ -1348,7 +1353,7 @@ public class GrailsDomainBinder
                                   InFlightMetadataCollector mappings, String 
sessionFactoryBeanName) throws MappingException {
         classBinding.bindClass(subClass, unionSubclass, mappings);
 
-        Mapping subMapping = new 
HibernateEntityWrapper().getMappedForm(subClass);
+        Mapping subMapping = getMapping(subClass);
 
         //TODO Verify if needed at all
 //        if ( unionSubclass.getEntityPersisterClass() == null ) {
@@ -1517,7 +1522,7 @@ public class GrailsDomainBinder
                                                        RootClass root, 
InFlightMetadataCollector mappings, String sessionFactoryBeanName) {
 
         // get the schema and catalog names from the configuration
-        Mapping gormMapping = new 
HibernateEntityWrapper().getMappedForm(domainClass);
+        Mapping gormMapping = getMapping(domainClass);
 
         configureDerivedProperties(domainClass, gormMapping);
         CacheConfig cc = gormMapping.getCache();
@@ -1641,7 +1646,7 @@ public class GrailsDomainBinder
     private void createClassProperties(HibernatePersistentEntity domainClass, 
PersistentClass persistentClass,
                                          InFlightMetadataCollector mappings, 
String sessionFactoryBeanName) {
 
-        Mapping gormMapping = new 
HibernateEntityWrapper().getMappedForm(domainClass);
+        Mapping gormMapping = getMapping(domainClass);
         Table table = persistentClass.getTable();
         table.setComment(gormMapping.getComment());
         final List<PersistentProperty> persistentProperties = 
domainClass.getPersistentProperties()
@@ -1897,8 +1902,8 @@ public class GrailsDomainBinder
 
     private boolean isComponentPropertyNullable(PersistentProperty 
componentProperty) {
         if (componentProperty == null) return false;
-        final HibernatePersistentEntity domainClass = 
(HibernatePersistentEntity) componentProperty.getOwner();
-        final Mapping mapping = new 
HibernateEntityWrapper().getMappedForm(domainClass);
+        final PersistentEntity domainClass = componentProperty.getOwner();
+        final Mapping mapping = getMapping(domainClass);
         return !domainClass.isRoot() && (mapping == null || 
mapping.isTablePerHierarchy()) || componentProperty.isNullable();
     }
 
@@ -1970,14 +1975,21 @@ public class GrailsDomainBinder
         return getNamingStrategy().resolveColumnName(property.getName()) + 
UNDERSCORE + IndexedCollection.DEFAULT_INDEX_COLUMN_NAME;
     }
 
-    private String getIndexColumnType(PersistentProperty property, String 
defaultType) {
-        PropertyConfig pc = new 
PersistentPropertyToPropertyConfig().toPropertyConfig(property);
-        if (pc.getIndexColumn() != null && pc.getIndexColumn().getType() != 
null) {
-            Mapping mapping =new 
HibernateEntityWrapper().getMappedForm(property.getOwner());
-            return new TypeNameProvider().getTypeName(property, mapping);
+        private String getIndexColumnType(PersistentProperty property, String 
defaultType) {
+
+            PropertyConfig pc = new 
PersistentPropertyToPropertyConfig().toPropertyConfig(property);
+
+            if (pc.getIndexColumn() != null && pc.getIndexColumn().getType() 
!= null) {
+
+                Mapping mapping = getMapping(property.getOwner());
+
+                return new TypeNameProvider().getTypeName(property, mapping);
+
+            }
+
+            return defaultType;
+
         }
-        return defaultType;
-    }
 
     private String getMapElementName(PersistentProperty property, String 
sessionFactoryBeanName) {
         PropertyConfig pc = new 
PersistentPropertyToPropertyConfig().toPropertyConfig(property);
@@ -2223,7 +2235,7 @@ public class GrailsDomainBinder
         }
 
         public String getTypeName(ToMany property) {
-            Mapping mapping = new 
HibernateEntityWrapper().getMappedForm(property.getOwner());
+            Mapping mapping = getMapping(property.getOwner());
             return new TypeNameProvider().getTypeName(property, mapping);
         }
 
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateEmbeddedPersistentEntity.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateEmbeddedPersistentEntity.java
new file mode 100644
index 0000000000..f1b677338d
--- /dev/null
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateEmbeddedPersistentEntity.java
@@ -0,0 +1,46 @@
+package org.grails.orm.hibernate.cfg;
+
+import org.grails.datastore.mapping.model.ClassMapping;
+import org.grails.datastore.mapping.model.EmbeddedPersistentEntity;
+import org.grails.datastore.mapping.model.IdentityMapping;
+import org.grails.datastore.mapping.model.MappingContext;
+import org.grails.datastore.mapping.model.PersistentEntity;
+
+public class HibernateEmbeddedPersistentEntity extends 
EmbeddedPersistentEntity<Mapping> {
+    private final ClassMapping<Mapping> classMapping;
+
+    public Mapping getMappedForm() {
+        return classMapping.getMappedForm();
+    }
+
+    public HibernateEmbeddedPersistentEntity(Class type, MappingContext ctx) {
+        super(type, ctx);
+        this.classMapping = new ClassMapping<Mapping>() {
+            Mapping mappedForm = (Mapping) 
context.getMappingFactory().createMappedForm(HibernateEmbeddedPersistentEntity.this);
+
+            @Override
+            public PersistentEntity getEntity() {
+                return HibernateEmbeddedPersistentEntity.this;
+            }
+
+            @Override
+            public Mapping getMappedForm() {
+                return mappedForm;
+            }
+
+            @Override
+            public IdentityMapping getIdentifier() {
+                return null;
+            }
+
+
+        };
+
+
+    }
+
+    @Override
+    public ClassMapping getMapping() {
+        return classMapping;
+    }
+}
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateMappingContext.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateMappingContext.java
index 5e6727b4fd..cde929dd87 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateMappingContext.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateMappingContext.java
@@ -199,44 +199,6 @@ public class HibernateMappingContext extends 
AbstractMappingContext {
                 .toList();
     }
 
-    public static class HibernateEmbeddedPersistentEntity extends 
EmbeddedPersistentEntity {
-        private final ClassMapping<Mapping> classMapping;
-
-        public Mapping getMappedForm() {
-            return classMapping.getMappedForm();
-        }
-
-        public HibernateEmbeddedPersistentEntity(Class type, MappingContext 
ctx) {
-            super(type, ctx);
-            this.classMapping = new ClassMapping<Mapping>() {
-                Mapping mappedForm = (Mapping) 
context.getMappingFactory().createMappedForm(HibernateEmbeddedPersistentEntity.this);
-                @Override
-                public PersistentEntity getEntity() {
-                    return HibernateEmbeddedPersistentEntity.this;
-                }
-
-                @Override
-                public Mapping getMappedForm() {
-                    return mappedForm;
-                }
-
-                @Override
-                public IdentityMapping getIdentifier() {
-                    return null;
-                }
-
-
-            };
-
-
-        }
-
-        @Override
-        public ClassMapping getMapping() {
-            return classMapping;
-        }
-    }
-
     class HibernateMappingFactory extends 
AbstractGormMappingFactory<Mapping,PropertyConfig> {
 
         public HibernateMappingFactory() {
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/CascadeBehaviorFetcher.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/CascadeBehaviorFetcher.java
index b48faaa982..ef1f0d0fbb 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/CascadeBehaviorFetcher.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/CascadeBehaviorFetcher.java
@@ -4,6 +4,7 @@ import org.grails.datastore.mapping.model.PersistentProperty;
 import org.grails.datastore.mapping.model.types.Association;
 import org.grails.datastore.mapping.model.types.Basic;
 import org.grails.datastore.mapping.model.types.Embedded;
+import org.grails.orm.hibernate.cfg.GrailsDomainBinder;
 import org.grails.orm.hibernate.cfg.Mapping;
 import org.grails.orm.hibernate.cfg.PropertyConfig;
 import org.hibernate.MappingException;
@@ -84,7 +85,7 @@ public class CascadeBehaviorFetcher {
     }
 
     private  Mapping getOwnersWrappedForm(Association<?> association) {
-        return new 
HibernateEntityWrapper().getMappedForm(association.getOwner());
+        return GrailsDomainBinder.getMapping(association.getOwner());
     }
 
 
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/ColumnBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/ColumnBinder.java
index 1461e1a743..db7b5cee35 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/ColumnBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/ColumnBinder.java
@@ -12,6 +12,7 @@ import org.grails.datastore.mapping.model.types.ManyToMany;
 import org.grails.datastore.mapping.model.types.OneToOne;
 import org.grails.datastore.mapping.model.types.ToOne;
 import org.grails.orm.hibernate.cfg.ColumnConfig;
+import org.grails.orm.hibernate.cfg.GrailsDomainBinder;
 import org.grails.orm.hibernate.cfg.Mapping;
 import org.grails.orm.hibernate.cfg.PersistentEntityNamingStrategy;
 import org.grails.orm.hibernate.cfg.PropertyConfig;
@@ -25,7 +26,6 @@ public class ColumnBinder {
    private final StringColumnConstraintsBinder stringColumnConstraintsBinder;
    private final NumericColumnConstraintsBinder numericColumnConstraintsBinder;
    private final CreateKeyForProps createKeyForProps;
-   private final HibernateEntityWrapper hibernateEntityWrapper;
    private final UserTypeFetcher userTypeFetcher;
    private final IndexBinder indexBinder;
 
@@ -35,7 +35,6 @@ public class ColumnBinder {
        this.stringColumnConstraintsBinder = new 
StringColumnConstraintsBinder();
        this.numericColumnConstraintsBinder = new 
NumericColumnConstraintsBinder();
        this.createKeyForProps = new 
CreateKeyForProps(columnNameForPropertyAndPathFetcher);
-       this.hibernateEntityWrapper = new HibernateEntityWrapper();
        this.userTypeFetcher = new UserTypeFetcher();
        this.indexBinder = new IndexBinder();
    }
@@ -44,7 +43,6 @@ public class ColumnBinder {
    , StringColumnConstraintsBinder stringColumnConstraintsBinder
    , NumericColumnConstraintsBinder numericColumnConstraintsBinder
    , CreateKeyForProps createKeyForProps
-   , HibernateEntityWrapper hibernateEntityWrapper
    , UserTypeFetcher userTypeFetcher
    , IndexBinder indexBinder) {
        this.columnNameForPropertyAndPathFetcher = 
columnNameForPropertyAndPathFetcher;
@@ -52,7 +50,6 @@ public class ColumnBinder {
        this.stringColumnConstraintsBinder = stringColumnConstraintsBinder;
        this.numericColumnConstraintsBinder =  numericColumnConstraintsBinder;
        this.createKeyForProps = createKeyForProps;
-       this.hibernateEntityWrapper = hibernateEntityWrapper;
        this.userTypeFetcher = userTypeFetcher;
        this.indexBinder = indexBinder;
    }
@@ -122,7 +119,7 @@ public class ColumnBinder {
 
         final PersistentEntity owner = property.getOwner();
         if (!owner.isRoot()) {
-            Mapping mapping = hibernateEntityWrapper.getMappedForm(owner);
+            Mapping mapping = GrailsDomainBinder.getMapping(owner);
             if (mapping.getTablePerHierarchy()) {
                 if (LOG.isDebugEnabled())
                     LOG.debug("[GrailsDomainBinder] Sub class property [" + 
property.getName() + "] for column name ["+column.getName()+"] set to 
nullable");
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/ColumnNameForPropertyAndPathFetcher.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/ColumnNameForPropertyAndPathFetcher.java
index 00a7785644..5f38f9d548 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/ColumnNameForPropertyAndPathFetcher.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/ColumnNameForPropertyAndPathFetcher.java
@@ -9,7 +9,6 @@ import org.grails.orm.hibernate.cfg.PropertyConfig;
 public class ColumnNameForPropertyAndPathFetcher {
 
     private final PersistentEntityNamingStrategy namingStrategy;
-    private final HibernateEntityWrapper hibernateEntityWrapper;
     private final PersistentPropertyToPropertyConfig 
persistentPropertyToPropertyConfig;
     private final DefaultColumnNameFetcher defaultColumnNameFetcher;
     private final BackticksRemover backticksRemover;
@@ -17,19 +16,16 @@ public class ColumnNameForPropertyAndPathFetcher {
     public ColumnNameForPropertyAndPathFetcher(PersistentEntityNamingStrategy 
namingStrategy
     ) {
         this.namingStrategy = namingStrategy;
-        this.hibernateEntityWrapper = new HibernateEntityWrapper();
         this.persistentPropertyToPropertyConfig = new 
PersistentPropertyToPropertyConfig();
         this.defaultColumnNameFetcher = new 
DefaultColumnNameFetcher(namingStrategy);
         this.backticksRemover = new BackticksRemover();
     }
 
     protected 
ColumnNameForPropertyAndPathFetcher(PersistentEntityNamingStrategy 
namingStrategy
-            , HibernateEntityWrapper hibernateEntityWrapper
             , PersistentPropertyToPropertyConfig 
persistentPropertyToPropertyConfig
     , DefaultColumnNameFetcher defaultColumnNameFetcher
     , BackticksRemover backticksRemover) {
         this.namingStrategy = namingStrategy;
-        this.hibernateEntityWrapper = hibernateEntityWrapper;
         this.persistentPropertyToPropertyConfig = 
persistentPropertyToPropertyConfig;
         this.defaultColumnNameFetcher = defaultColumnNameFetcher;
         this.backticksRemover = backticksRemover;
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 2bf95a3032..004336738c 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
@@ -2,6 +2,7 @@ package org.grails.orm.hibernate.cfg.domainbinding;
 
 import org.grails.datastore.mapping.model.PersistentProperty;
 import org.grails.orm.hibernate.cfg.ColumnConfig;
+import org.grails.orm.hibernate.cfg.GrailsDomainBinder;
 import org.grails.orm.hibernate.cfg.IdentityEnumType;
 import org.grails.orm.hibernate.cfg.Mapping;
 import org.grails.orm.hibernate.cfg.PropertyConfig;
@@ -39,7 +40,7 @@ public class EnumTypeBinder {
 
     public void bindEnumType(PersistentProperty property, Class<?> 
propertyType, SimpleValue simpleValue, String columnName) {
         PropertyConfig pc = new 
PersistentPropertyToPropertyConfig().toPropertyConfig(property);
-        Mapping ownerMapping = new 
HibernateEntityWrapper().getMappedForm(property.getOwner());
+        Mapping ownerMapping = 
GrailsDomainBinder.getMapping(property.getOwner());
         String enumType = pc.getEnumType();
         Properties enumProperties = new Properties();
         enumProperties.put(ENUM_CLASS_PROP, propertyType.getName());
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/HibernateEntityWrapper.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/HibernateEntityWrapper.java
deleted file mode 100644
index 76c6525603..0000000000
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/HibernateEntityWrapper.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.grails.orm.hibernate.cfg.domainbinding;
-
-import org.grails.datastore.mapping.model.ClassMapping;
-import org.grails.datastore.mapping.model.PersistentEntity;
-import org.grails.orm.hibernate.cfg.HibernateMappingContext;
-import org.grails.orm.hibernate.cfg.HibernatePersistentEntity;
-import org.grails.orm.hibernate.cfg.Mapping;
-import org.hibernate.MappingException;
-
-import java.util.Optional;
-
-import jakarta.annotation.Nonnull;
-
-/**
- * This class exists because Embedded Entities do not inherit
- * from HibernatePersistentEntity but have similar functionality.
- */
-public class HibernateEntityWrapper {
-
-    @Nonnull
-    public Mapping getMappedForm(PersistentEntity persistentEntity) {
-        if (persistentEntity instanceof HibernatePersistentEntity 
_hibernatePersistentEntity) {
-            return _hibernatePersistentEntity.getMappedForm();
-        } else if (persistentEntity instanceof 
HibernateMappingContext.HibernateEmbeddedPersistentEntity embedded) {
-            return embedded.getMappedForm();
-        } else {
-            throw new MappingException("Not correct Persistent Entity");
-        }
-    }
-
-}
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/ManyToOneBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/ManyToOneBinder.java
index d2bf5b5b74..86529f5902 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/ManyToOneBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/ManyToOneBinder.java
@@ -11,6 +11,7 @@ import org.grails.datastore.mapping.model.types.ManyToMany;
 import org.grails.datastore.mapping.model.types.OneToOne;
 import org.grails.orm.hibernate.cfg.ColumnConfig;
 import org.grails.orm.hibernate.cfg.CompositeIdentity;
+import org.grails.orm.hibernate.cfg.GrailsDomainBinder;
 import org.grails.orm.hibernate.cfg.JoinTable;
 import org.grails.orm.hibernate.cfg.Mapping;
 import org.grails.orm.hibernate.cfg.PersistentEntityNamingStrategy;
@@ -26,7 +27,6 @@ public class ManyToOneBinder {
     private final ManyToOneValuesBinder manyToOneValuesBinder;
     private final CompositeIdentifierToManyToOneBinder 
compositeIdentifierToManyToOneBinder;
     private final SimpleValueColumnFetcher simpleValueColumnFetcher;
-    private final HibernateEntityWrapper hibernateEntityWrapper;
 
     public ManyToOneBinder(PersistentEntityNamingStrategy namingStrategy) {
         this.namingStrategy = namingStrategy;
@@ -35,7 +35,6 @@ public class ManyToOneBinder {
         this.manyToOneValuesBinder = new ManyToOneValuesBinder();
         this.compositeIdentifierToManyToOneBinder = new 
CompositeIdentifierToManyToOneBinder(namingStrategy);
         this.simpleValueColumnFetcher = new SimpleValueColumnFetcher();
-        this.hibernateEntityWrapper = new HibernateEntityWrapper();
     }
 
     protected  ManyToOneBinder(PersistentEntityNamingStrategy namingStrategy
@@ -43,15 +42,13 @@ public class ManyToOneBinder {
     , PersistentPropertyToPropertyConfig persistentPropertyToPropertyConfig
     , ManyToOneValuesBinder manyToOneValuesBinder
     , CompositeIdentifierToManyToOneBinder compositeIdentifierToManyToOneBinder
-    , SimpleValueColumnFetcher simpleValueColumnFetcher
-    , HibernateEntityWrapper hibernateEntityWrapper) {
+    , SimpleValueColumnFetcher simpleValueColumnFetcher) {
         this.namingStrategy = namingStrategy;
         this.simpleValueBinder =simpleValueBinder;
         this.persistentPropertyToPropertyConfig = 
persistentPropertyToPropertyConfig;
         this.manyToOneValuesBinder = manyToOneValuesBinder;
         this.compositeIdentifierToManyToOneBinder = 
compositeIdentifierToManyToOneBinder;
         this.simpleValueColumnFetcher = simpleValueColumnFetcher;
-        this.hibernateEntityWrapper = hibernateEntityWrapper;
     }
 
 
@@ -65,7 +62,7 @@ public class ManyToOneBinder {
             ,String path) {
         manyToOneValuesBinder.bindManyToOneValues(property, manyToOne);
         PersistentEntity refDomainClass = property instanceof ManyToMany ? 
property.getOwner() : property.getAssociatedEntity();
-        Mapping mapping = hibernateEntityWrapper.getMappedForm(refDomainClass);
+        Mapping mapping = GrailsDomainBinder.getMapping(refDomainClass);
 
         boolean isComposite = mapping.hasCompositeIdentifier();
         if (isComposite) {
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleIdBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleIdBinder.java
index f5c4b50b07..b1ffba9195 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleIdBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleIdBinder.java
@@ -9,6 +9,7 @@ import org.hibernate.mapping.RootClass;
 import org.hibernate.mapping.Table;
 
 import org.grails.datastore.mapping.model.PersistentProperty;
+import org.grails.orm.hibernate.cfg.GrailsDomainBinder;
 import org.grails.orm.hibernate.cfg.HibernatePersistentEntity;
 import org.grails.orm.hibernate.cfg.Identity;
 import org.grails.orm.hibernate.cfg.PersistentEntityNamingStrategy;
@@ -18,20 +19,17 @@ import static 
org.grails.orm.hibernate.cfg.GrailsDomainBinder.EMPTY_PATH;
 public class SimpleIdBinder {
 
     private final BasicValueIdCreator basicValueIdCreator;
-    private final HibernateEntityWrapper hibernateEntityWrapper;
     private final SimpleValueBinder simpleValueBinder;
     private final PropertyBinder propertyBinder;
 
     public SimpleIdBinder(MetadataBuildingContext metadataBuildingContext, 
PersistentEntityNamingStrategy namingStrategy, JdbcEnvironment jdbcEnvironment, 
HibernatePersistentEntity domainClass, RootClass entity)  {
         this.basicValueIdCreator = new 
BasicValueIdCreator(metadataBuildingContext, jdbcEnvironment, domainClass, 
entity);
-        this.hibernateEntityWrapper = new HibernateEntityWrapper();
         this.simpleValueBinder =new SimpleValueBinder(namingStrategy);
         this.propertyBinder = new PropertyBinder();
     }
 
-    protected SimpleIdBinder(BasicValueIdCreator basicValueIdCreate, 
HibernateEntityWrapper hibernateEntityWrapper, SimpleValueBinder 
simpleValueBinder, PropertyBinder propertyBinder) {
+    protected SimpleIdBinder(BasicValueIdCreator basicValueIdCreate, 
SimpleValueBinder simpleValueBinder, PropertyBinder propertyBinder) {
         this.basicValueIdCreator = basicValueIdCreate;
-        this.hibernateEntityWrapper = hibernateEntityWrapper;
         this.simpleValueBinder = simpleValueBinder;
         this.propertyBinder = propertyBinder;
     }
@@ -39,7 +37,7 @@ public class SimpleIdBinder {
 
     public void bindSimpleId(PersistentProperty identifier, RootClass entity, 
Identity mappedId) {
 
-        boolean useSequence = 
hibernateEntityWrapper.getMappedForm(identifier.getOwner()).isTablePerConcreteClass();
+        boolean useSequence = 
GrailsDomainBinder.getMapping(identifier.getOwner()).isTablePerConcreteClass();
         // create the id value
 
         BasicValue id = basicValueIdCreator.getBasicValueId(entity, mappedId, 
useSequence);
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleValueBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleValueBinder.java
index 764ba7725a..d0dc7fa123 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleValueBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleValueBinder.java
@@ -14,6 +14,7 @@ import org.hibernate.mapping.Table;
 import org.grails.datastore.mapping.model.PersistentProperty;
 import org.grails.datastore.mapping.model.types.TenantId;
 import org.grails.orm.hibernate.cfg.ColumnConfig;
+import org.grails.orm.hibernate.cfg.GrailsDomainBinder;
 import org.grails.orm.hibernate.cfg.Mapping;
 import org.grails.orm.hibernate.cfg.PersistentEntityNamingStrategy;
 import org.grails.orm.hibernate.cfg.PropertyConfig;
@@ -23,7 +24,6 @@ public class SimpleValueBinder {
     private final ColumnConfigToColumnBinder columnConfigToColumnBinder ;
     private final ColumnBinder columnBinder;
     private final PersistentPropertyToPropertyConfig 
persistentPropertyToPropertyConfig;
-    private final HibernateEntityWrapper hibernateEntityWrapper;
     private final TypeNameProvider typeNameProvider;
 
 
@@ -33,7 +33,6 @@ public class SimpleValueBinder {
         this.columnConfigToColumnBinder = new ColumnConfigToColumnBinder();
         this.columnBinder = new ColumnBinder(namingStrategy);
         this.persistentPropertyToPropertyConfig = new 
PersistentPropertyToPropertyConfig();
-        this.hibernateEntityWrapper = new HibernateEntityWrapper();
         this.typeNameProvider = new TypeNameProvider();
 
     }
@@ -41,13 +40,11 @@ public class SimpleValueBinder {
     protected SimpleValueBinder(ColumnConfigToColumnBinder 
columnConfigToColumnBinder
             , ColumnBinder columnBinder
             , PersistentPropertyToPropertyConfig 
persistentPropertyToPropertyConfig
-    , HibernateEntityWrapper hibernateEntityWrapper
     ,TypeNameProvider typeNameProvider) {
         this.columnConfigToColumnBinder = columnConfigToColumnBinder;
         this.columnBinder = columnBinder;
         this.persistentPropertyToPropertyConfig = 
persistentPropertyToPropertyConfig;
         this.typeNameProvider = typeNameProvider;
-        this.hibernateEntityWrapper = hibernateEntityWrapper;
     }
 
 
@@ -68,7 +65,7 @@ public class SimpleValueBinder {
             , String path
     ) {
         PropertyConfig propertyConfig = 
persistentPropertyToPropertyConfig.toPropertyConfig(property);
-        Mapping mapping = 
hibernateEntityWrapper.getMappedForm(property.getOwner());
+        Mapping mapping = GrailsDomainBinder.getMapping(property.getOwner());
         final String typeName = typeNameProvider.getTypeName(property, 
mapping);
         if (typeName == null) {
             simpleValue.setTypeName(property.getType().getName());
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/TableNameFetcher.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/TableNameFetcher.java
index 56153e3ffc..a66fcc3170 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/TableNameFetcher.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/TableNameFetcher.java
@@ -3,6 +3,7 @@ package org.grails.orm.hibernate.cfg.domainbinding;
 import java.util.Optional;
 
 import org.grails.datastore.mapping.model.PersistentEntity;
+import org.grails.orm.hibernate.cfg.GrailsDomainBinder;
 import org.grails.orm.hibernate.cfg.Mapping;
 import org.grails.orm.hibernate.cfg.PersistentEntityNamingStrategy;
 
@@ -13,20 +14,13 @@ import 
org.grails.orm.hibernate.cfg.PersistentEntityNamingStrategy;
 public class TableNameFetcher {
 
     private final PersistentEntityNamingStrategy 
persistentEntityNamingStrategy;
-    private final HibernateEntityWrapper hibernateEntityWrapper;
 
     public TableNameFetcher(PersistentEntityNamingStrategy 
persistentEntityNamingStrategy) {
         this.persistentEntityNamingStrategy = persistentEntityNamingStrategy;
-        this.hibernateEntityWrapper = new HibernateEntityWrapper();
-    }
-
-    protected TableNameFetcher(PersistentEntityNamingStrategy 
persistentEntityNamingStrategy, HibernateEntityWrapper hibernateEntityWrapper) {
-        this.persistentEntityNamingStrategy = persistentEntityNamingStrategy;
-        this.hibernateEntityWrapper = hibernateEntityWrapper;
     }
 
     public String getTableName(PersistentEntity domainClass) {
-        var tableName = 
hibernateEntityWrapper.getMappedForm(domainClass).getTableName();
+        var tableName = 
GrailsDomainBinder.getMapping(domainClass).getTableName();
         return tableName != null ? tableName  
:persistentEntityNamingStrategy.resolveTableName(domainClass);
     }
 }
diff --git 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/MappingSpec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/MappingSpec.groovy
index 4eceb13502..c6aa7e4ba6 100644
--- 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/MappingSpec.groovy
+++ 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/MappingSpec.groovy
@@ -2,7 +2,6 @@ package org.grails.orm.hibernate.cfg
 
 import grails.gorm.annotation.Entity
 import grails.gorm.specs.HibernateGormDatastoreSpec
-import org.grails.orm.hibernate.cfg.domainbinding.HibernateEntityWrapper
 import spock.lang.Unroll
 
 /**
@@ -17,7 +16,7 @@ class MappingSpec extends HibernateGormDatastoreSpec {
         // Ensure all related entities are processed by the mapping context
         createPersistentEntity(Author, binder)
         def entity = createPersistentEntity(domainClass, binder)
-        def mapping = new HibernateEntityWrapper().getMappedForm(entity)
+        def mapping = (Mapping) entity.getMappedForm()
         def property = entity.getPropertyByName(propertyName)
 
         when: "The method is called on the mapping object"
diff --git 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ColumnBinderSpec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ColumnBinderSpec.groovy
index 2ff413fc7c..398ce49631 100644
--- 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ColumnBinderSpec.groovy
+++ 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ColumnBinderSpec.groovy
@@ -21,7 +21,6 @@ class ColumnBinderSpec extends Specification {
         def stringBinder = Mock(StringColumnConstraintsBinder)
         def numericBinder = Mock(NumericColumnConstraintsBinder)
         def keyCreator = Mock(CreateKeyForProps)
-        def hibernateWrapper = Mock(HibernateEntityWrapper)
         def userTypeFetcher = Mock(UserTypeFetcher)
         def indexBinder = Mock(IndexBinder)
 
@@ -32,7 +31,6 @@ class ColumnBinderSpec extends Specification {
                 stringBinder,
                 numericBinder,
                 keyCreator,
-                hibernateWrapper,
                 userTypeFetcher,
                 indexBinder
         )
@@ -73,7 +71,6 @@ class ColumnBinderSpec extends Specification {
         def stringBinder = Mock(StringColumnConstraintsBinder)
         def numericBinder = Mock(NumericColumnConstraintsBinder)
         def keyCreator = Mock(CreateKeyForProps)
-        def hibernateWrapper = Mock(HibernateEntityWrapper)
         def userTypeFetcher = Mock(UserTypeFetcher)
         def indexBinder = Mock(IndexBinder)
 
@@ -84,7 +81,6 @@ class ColumnBinderSpec extends Specification {
                 stringBinder,
                 numericBinder,
                 keyCreator,
-                hibernateWrapper,
                 userTypeFetcher,
                 indexBinder
         )
@@ -106,7 +102,7 @@ class ColumnBinderSpec extends Specification {
         parentProp.isNullable() >> true // should make column initially 
nullable
         prop.getOwner() >> owner
         owner.isRoot() >> false
-        hibernateWrapper.getMappedForm(owner) >> mapping
+        owner.getMappedForm() >> mapping
         mapping.getTablePerHierarchy() >> true // forces nullable true for 
subclass
         propToConfig.toPropertyConfig(prop) >>> [propertyConfig, 
propertyConfig] // called twice in code
         // numeric constraints applied
@@ -139,7 +135,6 @@ class ColumnBinderSpec extends Specification {
         def stringBinder = Mock(StringColumnConstraintsBinder)
         def numericBinder = Mock(NumericColumnConstraintsBinder)
         def keyCreator = Mock(CreateKeyForProps)
-        def hibernateWrapper = Mock(HibernateEntityWrapper)
         def userTypeFetcher = Mock(UserTypeFetcher)
         def indexBinder = Mock(IndexBinder)
 
@@ -150,7 +145,6 @@ class ColumnBinderSpec extends Specification {
                 stringBinder,
                 numericBinder,
                 keyCreator,
-                hibernateWrapper,
                 userTypeFetcher,
                 indexBinder
         )
@@ -196,7 +190,6 @@ class ColumnBinderSpec extends Specification {
         def stringBinder = Mock(StringColumnConstraintsBinder)
         def numericBinder = Mock(NumericColumnConstraintsBinder)
         def keyCreator = Mock(CreateKeyForProps)
-        def hibernateWrapper = Mock(HibernateEntityWrapper)
         def userTypeFetcher = Mock(UserTypeFetcher)
         def indexBinder = Mock(IndexBinder)
 
@@ -207,7 +200,6 @@ class ColumnBinderSpec extends Specification {
                 stringBinder,
                 numericBinder,
                 keyCreator,
-                hibernateWrapper,
                 userTypeFetcher,
                 indexBinder
         )
@@ -248,7 +240,6 @@ class ColumnBinderSpec extends Specification {
         def stringBinder = Mock(StringColumnConstraintsBinder)
         def numericBinder = Mock(NumericColumnConstraintsBinder)
         def keyCreator = Mock(CreateKeyForProps)
-        def hibernateWrapper = Mock(HibernateEntityWrapper)
         def userTypeFetcher = Mock(UserTypeFetcher)
         def indexBinder = Mock(IndexBinder)
 
@@ -259,7 +250,6 @@ class ColumnBinderSpec extends Specification {
                 stringBinder,
                 numericBinder,
                 keyCreator,
-                hibernateWrapper,
                 userTypeFetcher,
                 indexBinder
         )
@@ -304,7 +294,6 @@ class ColumnBinderSpec extends Specification {
         def stringBinder = Mock(StringColumnConstraintsBinder)
         def numericBinder = Mock(NumericColumnConstraintsBinder)
         def keyCreator = Mock(CreateKeyForProps)
-        def hibernateWrapper = Mock(HibernateEntityWrapper)
         def userTypeFetcher = Mock(UserTypeFetcher)
         def indexBinder = Mock(IndexBinder)
 
@@ -315,7 +304,6 @@ class ColumnBinderSpec extends Specification {
                 stringBinder,
                 numericBinder,
                 keyCreator,
-                hibernateWrapper,
                 userTypeFetcher,
                 indexBinder
         )
@@ -356,7 +344,6 @@ class ColumnBinderSpec extends Specification {
         def stringBinder = Mock(StringColumnConstraintsBinder)
         def numericBinder = Mock(NumericColumnConstraintsBinder)
         def keyCreator = Mock(CreateKeyForProps)
-        def hibernateWrapper = Mock(HibernateEntityWrapper)
         def userTypeFetcher = Mock(UserTypeFetcher)
         def indexBinder = Mock(IndexBinder)
 
@@ -367,7 +354,6 @@ class ColumnBinderSpec extends Specification {
                 stringBinder,
                 numericBinder,
                 keyCreator,
-                hibernateWrapper,
                 userTypeFetcher,
                 indexBinder
         )
@@ -409,7 +395,6 @@ class ColumnBinderSpec extends Specification {
         def stringBinder = Mock(StringColumnConstraintsBinder)
         def numericBinder = Mock(NumericColumnConstraintsBinder)
         def keyCreator = Mock(CreateKeyForProps)
-        def hibernateWrapper = Mock(HibernateEntityWrapper)
         def userTypeFetcher = Mock(UserTypeFetcher)
         def indexBinder = Mock(IndexBinder)
 
@@ -420,7 +405,6 @@ class ColumnBinderSpec extends Specification {
                 stringBinder,
                 numericBinder,
                 keyCreator,
-                hibernateWrapper,
                 userTypeFetcher,
                 indexBinder
         )
@@ -462,7 +446,6 @@ class ColumnBinderSpec extends Specification {
         def stringBinder = Mock(StringColumnConstraintsBinder)
         def numericBinder = Mock(NumericColumnConstraintsBinder)
         def keyCreator = Mock(CreateKeyForProps)
-        def hibernateWrapper = Mock(HibernateEntityWrapper)
         def userTypeFetcher = Mock(UserTypeFetcher)
         def indexBinder = Mock(IndexBinder)
 
@@ -473,7 +456,6 @@ class ColumnBinderSpec extends Specification {
                 stringBinder,
                 numericBinder,
                 keyCreator,
-                hibernateWrapper,
                 userTypeFetcher,
                 indexBinder
         )
@@ -513,7 +495,6 @@ class ColumnBinderSpec extends Specification {
         def stringBinder = Mock(StringColumnConstraintsBinder)
         def numericBinder = Mock(NumericColumnConstraintsBinder)
         def keyCreator = Mock(CreateKeyForProps)
-        def hibernateWrapper = Mock(HibernateEntityWrapper)
         def userTypeFetcher = Mock(UserTypeFetcher)
         def indexBinder = Mock(IndexBinder)
 
@@ -524,7 +505,6 @@ class ColumnBinderSpec extends Specification {
                 stringBinder,
                 numericBinder,
                 keyCreator,
-                hibernateWrapper,
                 userTypeFetcher,
                 indexBinder
         )
@@ -564,7 +544,6 @@ class ColumnBinderSpec extends Specification {
         def stringBinder = Mock(StringColumnConstraintsBinder)
         def numericBinder = Mock(NumericColumnConstraintsBinder)
         def keyCreator = Mock(CreateKeyForProps)
-        def hibernateWrapper = Mock(HibernateEntityWrapper)
         def userTypeFetcher = Mock(UserTypeFetcher)
         def indexBinder = Mock(IndexBinder)
 
@@ -575,7 +554,6 @@ class ColumnBinderSpec extends Specification {
                 stringBinder,
                 numericBinder,
                 keyCreator,
-                hibernateWrapper,
                 userTypeFetcher,
                 indexBinder
         )
@@ -613,7 +591,6 @@ class ColumnBinderSpec extends Specification {
         def stringBinder = Mock(StringColumnConstraintsBinder)
         def numericBinder = Mock(NumericColumnConstraintsBinder)
         def keyCreator = Mock(CreateKeyForProps)
-        def hibernateWrapper = Mock(HibernateEntityWrapper)
         def userTypeFetcher = Mock(UserTypeFetcher)
         def indexBinder = Mock(IndexBinder)
 
@@ -624,7 +601,6 @@ class ColumnBinderSpec extends Specification {
                 stringBinder,
                 numericBinder,
                 keyCreator,
-                hibernateWrapper,
                 userTypeFetcher,
                 indexBinder
         )
@@ -664,7 +640,6 @@ class ColumnBinderSpec extends Specification {
         def stringBinder = Mock(StringColumnConstraintsBinder)
         def numericBinder = Mock(NumericColumnConstraintsBinder)
         def keyCreator = Mock(CreateKeyForProps)
-        def hibernateWrapper = Mock(HibernateEntityWrapper)
         def userTypeFetcher = Mock(UserTypeFetcher)
         def indexBinder = Mock(IndexBinder)
 
@@ -675,7 +650,6 @@ class ColumnBinderSpec extends Specification {
                 stringBinder,
                 numericBinder,
                 keyCreator,
-                hibernateWrapper,
                 userTypeFetcher,
                 indexBinder
         )
@@ -714,7 +688,6 @@ class ColumnBinderSpec extends Specification {
         def stringBinder = Mock(StringColumnConstraintsBinder)
         def numericBinder = Mock(NumericColumnConstraintsBinder)
         def keyCreator = Mock(CreateKeyForProps)
-        def hibernateWrapper = Mock(HibernateEntityWrapper)
         def userTypeFetcher = Mock(UserTypeFetcher)
         def indexBinder = Mock(IndexBinder)
 
@@ -725,7 +698,6 @@ class ColumnBinderSpec extends Specification {
                 stringBinder,
                 numericBinder,
                 keyCreator,
-                hibernateWrapper,
                 userTypeFetcher,
                 indexBinder
         )
@@ -743,7 +715,7 @@ class ColumnBinderSpec extends Specification {
         prop.isNullable() >> false
         prop.getOwner() >> owner
         owner.isRoot() >> false
-        hibernateWrapper.getMappedForm(owner) >> mapping
+        owner.getMappedForm() >> mapping
         mapping.getTablePerHierarchy() >> false
         propToConfig.toPropertyConfig(prop) >>> [propertyConfig, 
propertyConfig]
         propertyConfig.isUnique() >> false
diff --git 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ColumnNameForPropertyAndPathFetcherSpec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ColumnNameForPropertyAndPathFetcherSpec.groovy
index 57c5692c19..ed963ccef9 100644
--- 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ColumnNameForPropertyAndPathFetcherSpec.groovy
+++ 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ColumnNameForPropertyAndPathFetcherSpec.groovy
@@ -16,12 +16,10 @@ class ColumnNameForPropertyAndPathFetcherSpec extends 
Specification {
     def "when ColumnConfig is null and mapping has explicit column then it is 
used"() {
         given:
         def namingStrategy = Mock(PersistentEntityNamingStrategy)
-        def hibernateEntityWrapper = Mock(HibernateEntityWrapper)
         def propToConfig = Mock(PersistentPropertyToPropertyConfig)
         def defaultColumnFetcher = Mock(DefaultColumnNameFetcher)
         def fetcher = new ColumnNameForPropertyAndPathFetcher(
                 namingStrategy,
-                hibernateEntityWrapper,
                 propToConfig,
                 defaultColumnFetcher,
                 backticksRemover
@@ -46,12 +44,10 @@ class ColumnNameForPropertyAndPathFetcherSpec extends 
Specification {
     def "when ColumnConfig provided and join key mapping exists then join key 
name is used"() {
         given:
         def namingStrategy = Mock(PersistentEntityNamingStrategy)
-        def hibernateEntityWrapper = Mock(HibernateEntityWrapper)
         def propToConfig = Mock(PersistentPropertyToPropertyConfig)
         def defaultColumnFetcher = Mock(DefaultColumnNameFetcher)
         def fetcher = new ColumnNameForPropertyAndPathFetcher(
                 namingStrategy,
-                hibernateEntityWrapper,
                 propToConfig,
                 defaultColumnFetcher,
                 backticksRemover
@@ -80,12 +76,10 @@ class ColumnNameForPropertyAndPathFetcherSpec extends 
Specification {
     def "when no explicit column then builds from path '#path' and default 
column '#defaultCol' with backticks removed"() {
         given:
         def namingStrategy = Mock(PersistentEntityNamingStrategy)
-        def hibernateEntityWrapper = Mock(HibernateEntityWrapper)
         def propToConfig = Mock(PersistentPropertyToPropertyConfig)
         def defaultColumnFetcher = Mock(DefaultColumnNameFetcher)
         def fetcher = new ColumnNameForPropertyAndPathFetcher(
                 namingStrategy,
-                hibernateEntityWrapper,
                 propToConfig,
                 defaultColumnFetcher,
                 backticksRemover
@@ -114,12 +108,10 @@ class ColumnNameForPropertyAndPathFetcherSpec extends 
Specification {
     def "when path is empty falls back to default column name only"() {
         given:
         def namingStrategy = Mock(PersistentEntityNamingStrategy)
-        def hibernateEntityWrapper = Mock(HibernateEntityWrapper)
         def propToConfig = Mock(PersistentPropertyToPropertyConfig)
         def defaultColumnFetcher = Mock(DefaultColumnNameFetcher)
         def fetcher = new ColumnNameForPropertyAndPathFetcher(
                 namingStrategy,
-                hibernateEntityWrapper,
                 propToConfig,
                 defaultColumnFetcher,
                 backticksRemover
diff --git 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/HibernateEntityWrapperSpec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/HibernateEntityWrapperSpec.groovy
deleted file mode 100644
index 7395b13472..0000000000
--- 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/HibernateEntityWrapperSpec.groovy
+++ /dev/null
@@ -1,158 +0,0 @@
-package org.grails.orm.hibernate.cfg.domainbinding
-
-import org.grails.datastore.mapping.model.ClassMapping
-import org.grails.datastore.mapping.model.MappingContext
-import org.grails.datastore.mapping.model.PersistentEntity
-import org.grails.datastore.mapping.model.PersistentProperty
-import org.grails.datastore.mapping.model.types.Association
-import org.grails.datastore.mapping.model.types.Embedded
-import org.grails.datastore.mapping.model.types.TenantId
-import org.grails.datastore.mapping.reflect.EntityReflector
-import org.grails.orm.hibernate.cfg.HibernateMappingContext
-import org.grails.orm.hibernate.cfg.HibernatePersistentEntity
-import org.grails.orm.hibernate.cfg.Mapping
-import org.hibernate.MappingException
-import spock.lang.Specification
-
-class HibernateEntityWrapperSpec extends Specification {
-
-    def "Test getMappedForm with different PersistentEntity types"() {
-        given:
-        def wrapper = new HibernateEntityWrapper()
-
-        and: "a mock HibernatePersistentEntity"
-        def hibernateEntity = Mock(HibernatePersistentEntity)
-        def hibernateMapping = Mock(Mapping)
-        hibernateEntity.getMappedForm() >> hibernateMapping
-
-        and: "a mock HibernateEmbeddedPersistentEntity"
-        def embeddedEntity = 
Mock(HibernateMappingContext.HibernateEmbeddedPersistentEntity)
-        def embeddedMapping = Mock(Mapping)
-        embeddedEntity.getMappedForm() >> embeddedMapping
-
-        and: "a generic PersistentEntity implementation"
-        def genericEntity = new TestPersistentEntity()
-
-        when: "getMappedForm is called with a HibernatePersistentEntity"
-        def resultForHibernateEntity = wrapper.getMappedForm(hibernateEntity)
-
-        then: "it returns the correct mapping"
-        resultForHibernateEntity == hibernateMapping
-
-        when: "getMappedForm is called with a 
HibernateEmbeddedPersistentEntity"
-        def resultForEmbeddedEntity = wrapper.getMappedForm(embeddedEntity)
-
-        then: "it returns the correct mapping"
-        resultForEmbeddedEntity == embeddedMapping
-
-        when: "getMappedForm is called with a generic PersistentEntity"
-        wrapper.getMappedForm(genericEntity)
-
-        then: "a MappingException is thrown"
-        thrown(MappingException)
-    }
-
-    // Helper class for the exception test
-    private static class TestPersistentEntity implements PersistentEntity {
-        @Override
-        String getName() {
-            return "TestEntity"
-        }
-
-        // Other methods can return null or default values as they are not 
called
-        @Override
-        Class getJavaClass() { return null }
-        @Override
-        boolean isInstance(Object obj) { return false }
-        @Override
-        String getDecapitalizedName() { return null }
-        @Override
-        List<String> getPersistentPropertyNames() { return [] }
-        @Override
-        List<PersistentProperty> getPersistentProperties() { return [] }
-        @Override
-        List<Association> getAssociations() { return [] }
-
-        @Override
-        List<Embedded> getEmbedded() {
-            return null
-        }
-
-        @Override
-        PersistentProperty getPropertyByName(String name) { return null }
-        @Override
-        PersistentProperty getIdentity() { return null }
-        @Override
-        PersistentProperty getVersion() { return null }
-        @Override
-        boolean isVersioned() { return false }
-
-
-        @Override
-        TenantId getTenantId() {
-            return null
-        }
-
-
-        @Override
-        PersistentEntity getParentEntity() { return null }
-        @Override
-        PersistentEntity getRootEntity() { return null }
-        @Override
-        boolean isRoot() { return false }
-        @Override
-        String getDiscriminator() { return null }
-        @Override
-        boolean isOwningEntity(PersistentEntity owner) { return false }
-        @Override
-        Object newInstance() { return null }
-        @Override
-        void initialize() { }
-
-        @Override
-        boolean isInitialized() {
-            return false
-        }
-
-        @Override
-        MappingContext getMappingContext() { return null }
-
-        @Override
-        boolean hasProperty(String name, Class type) {
-            return false
-        }
-
-        @Override
-        boolean isIdentityName(String propertyName) {
-            return false
-        }
-
-        @Override
-        EntityReflector getReflector() {
-            return null
-        }
-
-        @Override
-        boolean addOwner(Class type) {
-            return false
-        }
-
-        @Override
-        boolean isExternal() { return false }
-
-        @Override
-        boolean isMultiTenant() {
-            return false
-        }
-
-        @Override
-        PersistentProperty[] getCompositeIdentity() {
-            return null
-        }
-
-        @Override
-        void setExternal(boolean external) { }
-        @Override
-        ClassMapping getMapping() { return null }
-    }
-}
diff --git 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ManyToOneBinderSpec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ManyToOneBinderSpec.groovy
index c256f1ed44..9e99245353 100644
--- 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ManyToOneBinderSpec.groovy
+++ 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ManyToOneBinderSpec.groovy
@@ -27,19 +27,19 @@ class ManyToOneBinderSpec extends 
HibernateGormDatastoreSpec {
         def manyToOneValuesBinder = Mock(ManyToOneValuesBinder)
         def compositeBinder = Mock(CompositeIdentifierToManyToOneBinder)
         def columnFetcher = Mock(SimpleValueColumnFetcher)
-        def entityWrapper = Mock(HibernateEntityWrapper)
 
-        def binder = new ManyToOneBinder(namingStrategy, simpleValueBinder, 
propertyConfigConverter, manyToOneValuesBinder, compositeBinder, columnFetcher, 
entityWrapper)
+        def binder = new ManyToOneBinder(namingStrategy, simpleValueBinder, 
propertyConfigConverter, manyToOneValuesBinder, compositeBinder, columnFetcher)
 
         def association = Mock(Association)
         def manyToOne = new 
ManyToOne(getGrailsDomainBinder().getMetadataBuildingContext(), null)
         def path = "/test"
-        def refDomainClass = Mock(PersistentEntity)
         def mapping = new Mapping()
+        def refDomainClass = Mock(PersistentEntity) {
+            getMappedForm() >> mapping
+        }
         def propertyConfig = new PropertyConfig()
 
         association.getAssociatedEntity() >> refDomainClass
-        entityWrapper.getMappedForm(refDomainClass) >> mapping
         propertyConfigConverter.toPropertyConfig(association) >> propertyConfig
         mapping.setIdentity(hasCompositeId ? new CompositeIdentity() : null)
 
@@ -65,21 +65,21 @@ class ManyToOneBinderSpec extends 
HibernateGormDatastoreSpec {
         def manyToOneValuesBinder = Mock(ManyToOneValuesBinder)
         def compositeBinder = Mock(CompositeIdentifierToManyToOneBinder)
         def columnFetcher = Mock(SimpleValueColumnFetcher)
-        def entityWrapper = Mock(HibernateEntityWrapper)
 
-        def binder = new ManyToOneBinder(namingStrategy, simpleValueBinder, 
propertyConfigConverter, manyToOneValuesBinder, compositeBinder, columnFetcher, 
entityWrapper)
+        def binder = new ManyToOneBinder(namingStrategy, simpleValueBinder, 
propertyConfigConverter, manyToOneValuesBinder, compositeBinder, columnFetcher)
 
         def property = Mock(ManyToMany)
         def manyToOne = new 
ManyToOne(getGrailsDomainBinder().getMetadataBuildingContext(), null)
-        def ownerEntity = Mock(PersistentEntity)
         def mapping = new Mapping()
         mapping.setColumns(new HashMap<String, PropertyConfig>())
+        def ownerEntity = Mock(PersistentEntity) {
+            getMappedForm() >> mapping
+        }
         def propertyConfig = new PropertyConfig()
 
         property.isCircular() >> true
         property.getOwner() >> ownerEntity
         property.getName() >> "myCircularProp"
-        entityWrapper.getMappedForm(ownerEntity) >> mapping
         propertyConfigConverter.toPropertyConfig(property) >> propertyConfig
         namingStrategy.resolveColumnName("myCircularProp") >> 
"my_circular_prop"
 
@@ -103,20 +103,20 @@ class ManyToOneBinderSpec extends 
HibernateGormDatastoreSpec {
         def manyToOneValuesBinder = Mock(ManyToOneValuesBinder)
         def compositeBinder = Mock(CompositeIdentifierToManyToOneBinder)
         def columnFetcher = Mock(SimpleValueColumnFetcher)
-        def entityWrapper = Mock(HibernateEntityWrapper)
 
-        def binder = new ManyToOneBinder(namingStrategy, simpleValueBinder, 
propertyConfigConverter, manyToOneValuesBinder, compositeBinder, columnFetcher, 
entityWrapper)
+        def binder = new ManyToOneBinder(namingStrategy, simpleValueBinder, 
propertyConfigConverter, manyToOneValuesBinder, compositeBinder, columnFetcher)
 
         def property = Mock(OneToOne)
         def manyToOne = new 
ManyToOne(getGrailsDomainBinder().getMetadataBuildingContext(), null)
-        def refDomainClass = Mock(PersistentEntity)
         def mapping = new Mapping()
+        def refDomainClass = Mock(PersistentEntity) {
+            getMappedForm() >> mapping
+        }
         def propertyConfig = Mock(PropertyConfig)
         def column = new Column('test')
         def inverseSide = Mock(Association)
 
         property.getAssociatedEntity() >> refDomainClass
-        entityWrapper.getMappedForm(refDomainClass) >> mapping
         mapping.setIdentity(null)
         propertyConfigConverter.toPropertyConfig(property) >> propertyConfig
         columnFetcher.getColumnForSimpleValue(manyToOne) >> column
@@ -155,18 +155,18 @@ class ManyToOneBinderSpec extends 
HibernateGormDatastoreSpec {
         def manyToOneValuesBinder = Mock(ManyToOneValuesBinder)
         def compositeBinder = Mock(CompositeIdentifierToManyToOneBinder)
         def columnFetcher = Mock(SimpleValueColumnFetcher)
-        def entityWrapper = Mock(HibernateEntityWrapper)
 
-        def binder = new ManyToOneBinder(namingStrategy, simpleValueBinder, 
propertyConfigConverter, manyToOneValuesBinder, compositeBinder, columnFetcher, 
entityWrapper)
+        def binder = new ManyToOneBinder(namingStrategy, simpleValueBinder, 
propertyConfigConverter, manyToOneValuesBinder, compositeBinder, columnFetcher)
 
         def property = Mock(OneToOne)
         def manyToOne = new 
ManyToOne(getGrailsDomainBinder().getMetadataBuildingContext(), null)
-        def refDomainClass = Mock(PersistentEntity)
         def mapping = new Mapping()
+        def refDomainClass = Mock(PersistentEntity) {
+            getMappedForm() >> mapping
+        }
         def propertyConfig = new PropertyConfig()
 
         property.getAssociatedEntity() >> refDomainClass
-        entityWrapper.getMappedForm(refDomainClass) >> mapping
         mapping.setIdentity(null)
         propertyConfigConverter.toPropertyConfig(property) >> propertyConfig
         columnFetcher.getColumnForSimpleValue(manyToOne) >> null
diff --git 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleIdBinderSpec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleIdBinderSpec.groovy
index 4aa66fc48b..970fbe3a7f 100644
--- 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleIdBinderSpec.groovy
+++ 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleIdBinderSpec.groovy
@@ -16,7 +16,6 @@ class SimpleIdBinderSpec extends HibernateGormDatastoreSpec {
 
     MetadataBuildingContext metadataBuildingContext
     JdbcEnvironment jdbcEnvironment
-    def hibernateEntityWrapper
     def simpleValueBinder
     def propertyBinder
     def basicValueIdcreator
@@ -34,27 +33,27 @@ class SimpleIdBinderSpec extends HibernateGormDatastoreSpec 
{
         }
 
         // Mock the collaborators that can be safely mocked
-        hibernateEntityWrapper = Mock(HibernateEntityWrapper)
         simpleValueBinder = Mock(SimpleValueBinder)
         propertyBinder = Mock(PropertyBinder)
 
-        simpleIdBinder = new SimpleIdBinder(basicValueIdcreator, 
hibernateEntityWrapper, simpleValueBinder, propertyBinder)
+        simpleIdBinder = new SimpleIdBinder(basicValueIdcreator, 
simpleValueBinder, propertyBinder)
     }
 
     def "bindSimpleId with identity generator"() {
         given:
+        def mapping = Mock(org.grails.orm.hibernate.cfg.Mapping) {
+            isTablePerConcreteClass() >> false
+        }
         def testProperty = Mock(PersistentProperty) {
             getName() >> "id"
-            getOwner() >> Mock(PersistentEntity)
+            getOwner() >> Mock(PersistentEntity) {
+                getMappedForm() >> mapping
+            }
         }
         def rootClass = new RootClass(metadataBuildingContext)
         def table = new Table("TEST_TABLE")
         rootClass.setTable(table)
 
-        hibernateEntityWrapper.getMappedForm(_) >> 
Mock(org.grails.orm.hibernate.cfg.Mapping) {
-            isTablePerConcreteClass() >> false
-        }
-
         when:
         simpleIdBinder.bindSimpleId(testProperty, rootClass, new 
Identity(generator: 'identity'))
 
@@ -70,18 +69,19 @@ class SimpleIdBinderSpec extends HibernateGormDatastoreSpec 
{
 
     def "bindSimpleId with sequence generator"() {
         given:
+        def mapping = Mock(org.grails.orm.hibernate.cfg.Mapping) {
+            isTablePerConcreteClass() >> true
+        }
         def testProperty = Mock(PersistentProperty) {
             getName() >> "id"
-            getOwner() >> Mock(PersistentEntity)
+            getOwner() >> Mock(PersistentEntity) {
+                getMappedForm() >> mapping
+            }
         }
         def rootClass = new RootClass(metadataBuildingContext)
         def table = new Table("TEST_TABLE")
         rootClass.setTable(table)
 
-        hibernateEntityWrapper.getMappedForm(_) >> 
Mock(org.grails.orm.hibernate.cfg.Mapping) {
-            isTablePerConcreteClass() >> true
-        }
-
         when:
         simpleIdBinder.bindSimpleId(testProperty, rootClass, new 
Identity(generator: 'sequence', params: [sequence: 'SEQ_TEST']))
 
diff --git 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleValueBinderSpec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleValueBinderSpec.groovy
index e1596e98ca..b2f4414ed0 100644
--- 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleValueBinderSpec.groovy
+++ 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleValueBinderSpec.groovy
@@ -18,13 +18,11 @@ class SimpleValueBinderSpec extends Specification {
     def columnConfigToColumnBinder = Mock(ColumnConfigToColumnBinder)
     def columnBinder = Mock(ColumnBinder)
     def persistentPropertyToPropertyConfig = 
Mock(PersistentPropertyToPropertyConfig)
-    def hibernateEntityWrapper = Mock(HibernateEntityWrapper)
     def typeNameProvider = Mock(TypeNameProvider)
 
     def binder = new SimpleValueBinder(columnConfigToColumnBinder,
             columnBinder,
             persistentPropertyToPropertyConfig,
-            hibernateEntityWrapper,
             typeNameProvider)
 
     def "sets type from provider when present and applies type params"() {
@@ -40,7 +38,7 @@ class SimpleValueBinderSpec extends Specification {
         // stubs
         persistentPropertyToPropertyConfig.toPropertyConfig(prop) >> pc
         prop.getOwner() >> owner
-        hibernateEntityWrapper.getMappedForm(owner) >> mapping
+        owner.getMappedForm() >> mapping
         typeNameProvider.getTypeName(prop, mapping) >> "custom.Type"
         pc.getTypeParams() >> props
         pc.isDerived() >> false
@@ -75,7 +73,7 @@ class SimpleValueBinderSpec extends Specification {
 
         persistentPropertyToPropertyConfig.toPropertyConfig(prop) >> pc
         prop.getOwner() >> owner
-        hibernateEntityWrapper.getMappedForm(owner) >> mapping
+        owner.getMappedForm() >> mapping
         typeNameProvider.getTypeName(prop, mapping) >> null
         pc.isDerived() >> false
         pc.getColumns() >> null
@@ -108,7 +106,7 @@ class SimpleValueBinderSpec extends Specification {
         persistentPropertyToPropertyConfig.toPropertyConfig(tenantProp) >> 
tenantPc
         prop.getOwner() >> owner
         tenantProp.getOwner() >> owner
-        hibernateEntityWrapper.getMappedForm(owner) >> mapping
+        owner.getMappedForm() >> mapping
         typeNameProvider.getTypeName(_, _) >> 'X'
 
         pc.isDerived() >> true
@@ -146,7 +144,7 @@ class SimpleValueBinderSpec extends Specification {
 
         persistentPropertyToPropertyConfig.toPropertyConfig(prop) >> pc
         prop.getOwner() >> owner
-        hibernateEntityWrapper.getMappedForm(owner) >> mapping
+        owner.getMappedForm() >> mapping
         typeNameProvider.getTypeName(prop, mapping) >> 'Y'
         pc.isDerived() >> false
         pc.getColumns() >> null
@@ -177,7 +175,7 @@ class SimpleValueBinderSpec extends Specification {
 
         persistentPropertyToPropertyConfig.toPropertyConfig(prop) >> pc
         prop.getOwner() >> owner
-        hibernateEntityWrapper.getMappedForm(owner) >> mapping
+        owner.getMappedForm() >> mapping
         typeNameProvider.getTypeName(prop, mapping) >> 'Z'
         pc.isDerived() >> false
         pc.getColumns() >> [cc1, cc2]
diff --git 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/TableNameFetcherSpec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/TableNameFetcherSpec.groovy
index 2b1901b2ab..8f6c44bfe2 100644
--- 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/TableNameFetcherSpec.groovy
+++ 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/TableNameFetcherSpec.groovy
@@ -12,13 +12,12 @@ class TableNameFetcherSpec extends Specification {
     def "Test getTableName when mapped form returns '#tableName'"() {
         given:
         def namingStrategy = Mock(PersistentEntityNamingStrategy)
-        def hibernateEntityWrapper = Mock(HibernateEntityWrapper)
-        def fetcher = new TableNameFetcher(namingStrategy, 
hibernateEntityWrapper)
-        def persistentEntity = Mock(PersistentEntity)
+        def fetcher = new TableNameFetcher(namingStrategy)
         def mapping = Mock(Mapping)
+        def persistentEntity = Mock(PersistentEntity) {
+            getMappedForm() >> mapping
+        }
 
-        // Setup: getMappedForm always returns a valid Mapping object, per its 
contract
-        hibernateEntityWrapper.getMappedForm(persistentEntity) >> mapping
         // The table name from the mapping can be explicit or null
         mapping.getTableName() >> tableName
         // The naming strategy will provide a fallback
diff --git 
a/grails-datastore-core/src/main/groovy/org/grails/datastore/mapping/model/AbstractPersistentEntity.java
 
b/grails-datastore-core/src/main/groovy/org/grails/datastore/mapping/model/AbstractPersistentEntity.java
index fe8562dbb5..2fa5b53aae 100644
--- 
a/grails-datastore-core/src/main/groovy/org/grails/datastore/mapping/model/AbstractPersistentEntity.java
+++ 
b/grails-datastore-core/src/main/groovy/org/grails/datastore/mapping/model/AbstractPersistentEntity.java
@@ -452,4 +452,6 @@ public abstract class AbstractPersistentEntity<T extends 
Entity> implements Pers
         return owners.add(type);
     }
 
+
+
 }
diff --git 
a/grails-datastore-core/src/main/groovy/org/grails/datastore/mapping/model/EmbeddedPersistentEntity.java
 
b/grails-datastore-core/src/main/groovy/org/grails/datastore/mapping/model/EmbeddedPersistentEntity.java
index 14e09157a5..c65680f0a4 100644
--- 
a/grails-datastore-core/src/main/groovy/org/grails/datastore/mapping/model/EmbeddedPersistentEntity.java
+++ 
b/grails-datastore-core/src/main/groovy/org/grails/datastore/mapping/model/EmbeddedPersistentEntity.java
@@ -18,6 +18,7 @@
  */
 package org.grails.datastore.mapping.model;
 
+import org.grails.datastore.mapping.config.Entity;
 import org.grails.datastore.mapping.reflect.FieldEntityAccess;
 
 /**
@@ -27,7 +28,7 @@ import org.grails.datastore.mapping.reflect.FieldEntityAccess;
  * @since 1.0
  */
 @SuppressWarnings({"rawtypes", "unchecked"})
-public class EmbeddedPersistentEntity extends AbstractPersistentEntity {
+public class EmbeddedPersistentEntity<T extends Entity> extends 
AbstractPersistentEntity<T> {
     public EmbeddedPersistentEntity(Class type, MappingContext ctx) {
         super(type, ctx);
     }
diff --git 
a/grails-datastore-core/src/main/groovy/org/grails/datastore/mapping/model/PersistentEntity.java
 
b/grails-datastore-core/src/main/groovy/org/grails/datastore/mapping/model/PersistentEntity.java
index 9dddfdf909..10012c5cc7 100644
--- 
a/grails-datastore-core/src/main/groovy/org/grails/datastore/mapping/model/PersistentEntity.java
+++ 
b/grails-datastore-core/src/main/groovy/org/grails/datastore/mapping/model/PersistentEntity.java
@@ -144,6 +144,14 @@ public interface PersistentEntity extends Initializable {
      */
     ClassMapping getMapping();
 
+    /**
+     * @return The mapped form of the entity
+     */
+    default org.grails.datastore.mapping.config.Entity getMappedForm() {
+        ClassMapping mapping = getMapping();
+        return mapping != null ? mapping.getMappedForm() : null;
+    }
+
     /**
      * Constructs a new instance
      * @return The new instnace
@@ -228,4 +236,5 @@ public interface PersistentEntity extends Initializable {
     boolean addOwner(Class type);
 
 
+
 }

Reply via email to