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 15f67da50024529b54b808a0ffeef817d015e9e3
Author: Walter Duque de Estrada <[email protected]>
AuthorDate: Thu Feb 12 21:35:16 2026 -0600

    Simplify GORM Hibernate 7 binder code by using specific persistent types.
    
    - Replace PersistentEntity/PersistentProperty with 
GrailsHibernatePersistentEntity/GrailsHibernatePersistentProperty in binder 
signatures.
    - Reduce explicit casting in binding logic.
    - Standardize on getPersistentPropertiesToBind() where appropriate.
    - Fix compilation issues in ClassBinder, ComponentBinder and 
CollectionSecondPassBinder.
    - Maintain compatibility with existing unit test mocks by reverting some 
parameters to base types where necessary.
---
 .../orm/hibernate/cfg/GrailsDomainBinder.java      |  3 +-
 .../cfg/domainbinding/binder/ClassBinder.java      |  7 +--
 .../cfg/domainbinding/binder/CollectionBinder.java | 21 ++-------
 .../cfg/domainbinding/binder/ComponentBinder.java  |  7 +--
 .../binder/ComponentPropertyBinder.java            | 18 ++++----
 .../domainbinding/binder/CompositeIdBinder.java    | 23 ++++------
 .../CompositeIdentifierToManyToOneBinder.java      |  4 +-
 .../domainbinding/binder/GrailsPropertyBinder.java | 12 ++---
 .../cfg/domainbinding/binder/ManyToOneBinder.java  | 19 ++++----
 .../cfg/domainbinding/binder/VersionBinder.java    |  9 ++--
 .../secondpass/CollectionSecondPassBinder.java     | 53 ++++++++++------------
 .../domainbinding/GrailsPropertyBinderSpec.groovy  |  3 +-
 12 files changed, 74 insertions(+), 105 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 9785aba27e..af6e9ca522 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
@@ -578,7 +578,8 @@ public class GrailsDomainBinder
 
 
         for (GrailsHibernatePersistentProperty currentGrailsProp : 
domainClass.getPersistentPropertiesToBind()) {
-           grailsPropertyBinder.bindProperty(persistentClass, 
currentGrailsProp, mappings, sessionFactoryBeanName);
+           var value = grailsPropertyBinder.bindProperty(persistentClass, 
currentGrailsProp, mappings, sessionFactoryBeanName);
+           
persistentClass.addProperty(propertyFromValueCreator.createProperty(value, 
currentGrailsProp));
         }
 
         new 
NaturalIdentifierBinder().bindNaturalIdentifier(domainClass.getMappedForm(), 
persistentClass);
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ClassBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ClassBinder.java
index 87c034ab80..0a36736c05 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ClassBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ClassBinder.java
@@ -1,6 +1,6 @@
 package org.grails.orm.hibernate.cfg.domainbinding.binder;
 
-import org.grails.datastore.mapping.model.PersistentEntity;
+import org.grails.orm.hibernate.cfg.GrailsHibernatePersistentEntity;
 import org.grails.orm.hibernate.cfg.Mapping;
 import org.hibernate.boot.spi.InFlightMetadataCollector;
 import org.hibernate.mapping.PersistentClass;
@@ -19,7 +19,7 @@ public class ClassBinder {
      * @param persistentClass The persistant class
      * @param collector        Existing collector
      */
-    public void bindClass(@Nonnull PersistentEntity persistentEntity, 
PersistentClass persistentClass, @Nonnull InFlightMetadataCollector collector) {
+    public void bindClass(@Nonnull GrailsHibernatePersistentEntity 
persistentEntity, PersistentClass persistentClass, @Nonnull 
InFlightMetadataCollector collector) {
         persistentClass.setLazy(true);
         var entityName = persistentEntity.getName();
         persistentClass.setEntityName(entityName);
@@ -31,7 +31,8 @@ public class ClassBinder {
         persistentClass.setSelectBeforeUpdate(false);
 
         boolean autoImport;
-        if (persistentEntity.getMapping().getMappedForm() instanceof Mapping 
mappedForm) {
+        Mapping mappedForm = persistentEntity.getMappedForm();
+        if (mappedForm != null) {
             autoImport = mappedForm.isAutoImport();
         } else {
             autoImport = 
collector.getMetadataBuildingOptions().getMappingDefaults().isAutoImportEnabled();
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/CollectionBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/CollectionBinder.java
index 33ca3896af..28ef711d04 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/CollectionBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/CollectionBinder.java
@@ -2,15 +2,14 @@ package org.grails.orm.hibernate.cfg.domainbinding.binder;
 
 import jakarta.annotation.Nonnull;
 
-import org.grails.datastore.mapping.model.PersistentProperty;
 import org.grails.orm.hibernate.cfg.GrailsDomainBinder;
 import org.grails.orm.hibernate.cfg.GrailsHibernateUtil;
+import org.grails.orm.hibernate.cfg.GrailsHibernatePersistentProperty;
 import 
org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateToManyProperty;
 import org.grails.orm.hibernate.cfg.PersistentEntityNamingStrategy;
 import org.grails.orm.hibernate.cfg.PropertyConfig;
 import org.grails.orm.hibernate.cfg.JoinTable;
 import org.grails.orm.hibernate.cfg.domainbinding.util.CascadeBehavior;
-import 
org.grails.orm.hibernate.cfg.domainbinding.util.DefaultColumnNameFetcher;
 import org.grails.orm.hibernate.cfg.domainbinding.util.NamespaceNameExtractor;
 import org.grails.orm.hibernate.cfg.domainbinding.util.TableForManyCalculator;
 import 
org.grails.orm.hibernate.cfg.domainbinding.secondpass.CollectionSecondPassBinder;
@@ -43,7 +42,6 @@ public class CollectionBinder {
     private final ListSecondPassBinder listSecondPassBinder;
     private final CollectionSecondPassBinder collectionSecondPassBinder;
     private final MapSecondPassBinder mapSecondPassBinder;
-    private final DefaultColumnNameFetcher defaultColumnNameFetcher;
 
     public CollectionBinder(MetadataBuildingContext metadataBuildingContext, 
GrailsDomainBinder grailsDomainBinder, PersistentEntityNamingStrategy 
namingStrategy) {
         this.metadataBuildingContext = metadataBuildingContext;
@@ -52,7 +50,6 @@ public class CollectionBinder {
         this.collectionSecondPassBinder = new 
CollectionSecondPassBinder(metadataBuildingContext, namingStrategy);
         this.listSecondPassBinder = new 
ListSecondPassBinder(metadataBuildingContext, 
namingStrategy,collectionSecondPassBinder);
         this.mapSecondPassBinder = new 
MapSecondPassBinder(metadataBuildingContext, namingStrategy, 
collectionSecondPassBinder);
-        this.defaultColumnNameFetcher = new 
DefaultColumnNameFetcher(namingStrategy);
 
     }
 
@@ -92,7 +89,7 @@ public class CollectionBinder {
         if (property.shouldBindWithForeignKey()) {
             OneToMany oneToMany = new OneToMany(metadataBuildingContext, 
collection.getOwner());
             collection.setElement(oneToMany);
-            bindOneToMany((org.grails.datastore.mapping.model.types.OneToMany) 
property, oneToMany, mappings);
+            bindOneToMany((org.grails.datastore.mapping.model.types.OneToMany) 
property, oneToMany);
         } else {
             bindCollectionTable(property, mappings, collection, 
owner.getTable());
 
@@ -122,14 +119,14 @@ public class CollectionBinder {
     }
 
 
-    private String getNameForPropertyAndPath(PersistentProperty property, 
String path) {
+    private String getNameForPropertyAndPath(GrailsHibernatePersistentProperty 
property, String path) {
         if (GrailsHibernateUtil.isNotEmpty(path)) {
             return GrailsHibernateUtil.qualify(path, property.getName());
         }
         return property.getName();
     }
 
-    private void 
bindOneToMany(org.grails.datastore.mapping.model.types.OneToMany 
currentGrailsProp, OneToMany one, @Nonnull InFlightMetadataCollector mappings) {
+    private void 
bindOneToMany(org.grails.datastore.mapping.model.types.OneToMany 
currentGrailsProp, OneToMany one) {
         
one.setReferencedEntityName(currentGrailsProp.getAssociatedEntity().getName());
         one.setIgnoreNotFound(true);
     }
@@ -163,12 +160,4 @@ public class CollectionBinder {
                 schemaName, catalogName,
                 tableName, null, false, metadataBuildingContext));
     }
-
-
-
-
-
-
-
-
-}
\ No newline at end of file
+}
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ComponentBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ComponentBinder.java
index 2847160eba..30eea090bf 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ComponentBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ComponentBinder.java
@@ -56,12 +56,9 @@ public class ComponentBinder {
                 continue;
             }
 
-            if (currentGrailsProp instanceof 
GrailsHibernatePersistentProperty) {
-                componentPropertyBinder.bindComponentProperty(component, 
property, (GrailsHibernatePersistentProperty) currentGrailsProp, 
persistentClass, path,
+            if (currentGrailsProp instanceof GrailsHibernatePersistentProperty 
hibernateProp) {
+                componentPropertyBinder.bindComponentProperty(component, 
property, hibernateProp, persistentClass, path,
                         table, mappings, sessionFactoryBeanName);
-            } else {
-                // Handle cases where currentGrailsProp is not a 
GrailsHibernatePersistentProperty
-                // For now, we'll just skip binding for such properties in 
this test context
             }
         }
     }
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ComponentPropertyBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ComponentPropertyBinder.java
index 6a7f3214ed..54d15ac0a4 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ComponentPropertyBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ComponentPropertyBinder.java
@@ -115,11 +115,11 @@ public class ComponentPropertyBinder {
 
             value = new ManyToOne(metadataBuildingContext, table);
             new ManyToOneBinder(namingStrategy).bindManyToOne((Association) 
currentGrailsProp, (ManyToOne) value, path);
-        } else if (currentGrailsProp instanceof 
org.grails.datastore.mapping.model.types.OneToOne) {
+        } else if (currentGrailsProp instanceof 
org.grails.datastore.mapping.model.types.OneToOne association) {
             if (LOG.isDebugEnabled())
                 LOG.debug("[GrailsDomainBinder] Binding property [" + 
currentGrailsProp.getName() + "] as OneToOne");
 
-            if (((Association) 
currentGrailsProp).canBindOneToOneWithSingleColumnAndForeignKey()) {
+            if (association.canBindOneToOneWithSingleColumnAndForeignKey()) {
                 value = new OneToOne(metadataBuildingContext, table, 
persistentClass);
                 new 
OneToOneBinder(namingStrategy).bindOneToOne((org.grails.datastore.mapping.model.types.OneToOne)
 currentGrailsProp, (OneToOne) value, path);
             }
@@ -128,9 +128,9 @@ public class ComponentPropertyBinder {
                 new 
ManyToOneBinder(namingStrategy).bindManyToOne((Association) currentGrailsProp, 
(ManyToOne) value, path);
             }
         }
-        else if (currentGrailsProp instanceof Embedded) {
+        else if (currentGrailsProp instanceof Embedded embedded) {
             value = new Component(metadataBuildingContext, persistentClass);
-            componentBinder.bindComponent((Component) value, (Embedded) 
currentGrailsProp, true, mappings, sessionFactoryBeanName);
+            componentBinder.bindComponent((Component) value, embedded, true, 
mappings, sessionFactoryBeanName);
         }
         else {
             if (LOG.isDebugEnabled())
@@ -138,16 +138,16 @@ public class ComponentPropertyBinder {
 
             value = new BasicValue(metadataBuildingContext, table);
             if (currentGrailsProp.getType().isEnum()) {
-                String columnName = new 
ColumnNameForPropertyAndPathFetcher(namingStrategy).getColumnNameForPropertyAndPath((GrailsHibernatePersistentProperty)
 currentGrailsProp, path, null);
-                
enumTypeBinder.bindEnumType((GrailsHibernatePersistentProperty) 
currentGrailsProp, currentGrailsProp.getType(), (SimpleValue) value, 
columnName);
+                String columnName = new 
ColumnNameForPropertyAndPathFetcher(namingStrategy).getColumnNameForPropertyAndPath(currentGrailsProp,
 path, null);
+                enumTypeBinder.bindEnumType(currentGrailsProp, 
currentGrailsProp.getType(), (SimpleValue) value, columnName);
             }
             else {
                 // set type
-                
this.simpleValueBinder.bindSimpleValue((GrailsHibernatePersistentProperty) 
currentGrailsProp, (GrailsHibernatePersistentProperty) componentProperty, 
(SimpleValue) value, path);
+                this.simpleValueBinder.bindSimpleValue(currentGrailsProp, 
(GrailsHibernatePersistentProperty) componentProperty, (SimpleValue) value, 
path);
             }
         }
 
-        Property persistentProperty = 
propertyFromValueCreator.createProperty(value, 
(GrailsHibernatePersistentProperty) currentGrailsProp);
+        Property persistentProperty = 
propertyFromValueCreator.createProperty(value, currentGrailsProp);
         component.addProperty(persistentProperty);
         if (componentProperty != null && componentProperty.getOwner() 
instanceof GrailsHibernatePersistentEntity ghpe && 
ghpe.isComponentPropertyNullable(componentProperty)) {
             final Iterator<?> columnIterator = value.getColumns().iterator();
@@ -162,4 +162,4 @@ public class ComponentPropertyBinder {
                                boolean isNullable, @Nonnull 
InFlightMetadataCollector mappings, String sessionFactoryBeanName) {
         componentBinder.bindComponent(component, property, isNullable, 
mappings, sessionFactoryBeanName);
     }
-}
\ No newline at end of file
+}
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/CompositeIdBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/CompositeIdBinder.java
index d5d5cb5ba4..f030bf0847 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/CompositeIdBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/CompositeIdBinder.java
@@ -6,8 +6,6 @@ import org.hibernate.boot.spi.MetadataBuildingContext;
 import org.hibernate.mapping.Component;
 import org.hibernate.mapping.RootClass;
 
-import org.grails.datastore.mapping.model.PersistentEntity;
-import org.grails.datastore.mapping.model.PersistentProperty;
 import org.grails.orm.hibernate.cfg.CompositeIdentity;
 import org.grails.orm.hibernate.cfg.GrailsHibernatePersistentEntity;
 import org.grails.orm.hibernate.cfg.GrailsHibernatePersistentProperty;
@@ -26,12 +24,7 @@ public class CompositeIdBinder {
     }
 
 
-    public void bindCompositeId(@Nonnull PersistentEntity domainClass, 
RootClass root,
-                                 CompositeIdentity compositeIdentity, @Nonnull 
InFlightMetadataCollector mappings, String sessionFactoryBeanName) {
-        bindCompositeId(domainClass, (GrailsHibernatePersistentEntity) 
domainClass, root, compositeIdentity, mappings, sessionFactoryBeanName);
-    }
-
-    public void bindCompositeId(@Nonnull PersistentEntity domainClass, 
@Nonnull GrailsHibernatePersistentEntity hibernatePersistentEntity, RootClass 
root,
+    public void bindCompositeId(@Nonnull GrailsHibernatePersistentEntity 
domainClass, RootClass root,
                                  CompositeIdentity compositeIdentity, @Nonnull 
InFlightMetadataCollector mappings, String sessionFactoryBeanName) {
         Component id = new Component(metadataBuildingContext, root);
         id.setNullValue("undefined");
@@ -46,29 +39,29 @@ public class CompositeIdBinder {
 
         id.setRoleName(path);
 
-        PersistentProperty[] composite;
+        GrailsHibernatePersistentProperty[] composite;
         if (compositeIdentity != null && compositeIdentity.getPropertyNames() 
!= null) {
             String[] propertyNames = compositeIdentity.getPropertyNames();
-            composite = new PersistentProperty[propertyNames.length];
+            composite = new 
GrailsHibernatePersistentProperty[propertyNames.length];
             for (int i = 0; i < propertyNames.length; i++) {
-                composite[i] = domainClass.getPropertyByName(propertyNames[i]);
+                composite[i] = (GrailsHibernatePersistentProperty) 
domainClass.getPropertyByName(propertyNames[i]);
             }
         } else {
-            composite = hibernatePersistentEntity.getCompositeIdentity();
+            composite = domainClass.getCompositeIdentity();
         }
 
         if (composite == null) {
             throw new MappingException("No composite identifier properties 
found for class [" + domainClass.getName() + "]");
         }
 
-        PersistentProperty identifierProp = 
hibernatePersistentEntity.getIdentity();
-        for (PersistentProperty property : composite) {
+        GrailsHibernatePersistentProperty identifierProp = 
domainClass.getIdentity();
+        for (GrailsHibernatePersistentProperty property : composite) {
             if (property == null) {
                 throw new MappingException("Property referenced in 
composite-id mapping of class [" + domainClass.getName() +
                         "] is not a valid property!");
             }
 
-            componentPropertyBinder.bindComponentProperty(id, identifierProp, 
(GrailsHibernatePersistentProperty) property, root, "", root.getTable(), 
mappings, sessionFactoryBeanName);
+            componentPropertyBinder.bindComponentProperty(id, identifierProp, 
property, root, "", root.getTable(), mappings, sessionFactoryBeanName);
         }
     }
 }
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/CompositeIdentifierToManyToOneBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/CompositeIdentifierToManyToOneBinder.java
index f29e27d8b7..0d6674579a 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/CompositeIdentifierToManyToOneBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/CompositeIdentifierToManyToOneBinder.java
@@ -75,7 +75,7 @@ public class CompositeIdentifierToManyToOneBinder {
                 // if the name is null then configure the name by convention
                 if (cc.getName() == null) {
                     // use the referenced table name as a prefix
-                    String prefix = 
tableNameFetcher.getTableName((GrailsHibernatePersistentEntity) refDomainClass);
+                    String prefix = refDomainClass instanceof 
GrailsHibernatePersistentEntity ghpe ? tableNameFetcher.getTableName(ghpe) : 
refDomainClass.getName();
                     PersistentProperty referencedProperty = 
refDomainClass.getPropertyByName(propertyName);
 
                     // if the referenced property is a ToOne and it has a 
composite id
@@ -108,4 +108,4 @@ public class CompositeIdentifierToManyToOneBinder {
         // set type
         simpleValueBinder.bindSimpleValue(property, null, value, path);
     }
-}
\ No newline at end of file
+}
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/GrailsPropertyBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/GrailsPropertyBinder.java
index e99c64bbdf..e85fb8e881 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/GrailsPropertyBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/GrailsPropertyBinder.java
@@ -20,7 +20,6 @@ import org.hibernate.mapping.Component;
 import org.hibernate.mapping.ManyToOne;
 import org.hibernate.mapping.OneToOne;
 import org.hibernate.mapping.PersistentClass;
-import org.hibernate.mapping.Property;
 import org.hibernate.mapping.SimpleValue;
 import org.hibernate.mapping.Table;
 import org.hibernate.mapping.Value;
@@ -89,7 +88,7 @@ public class GrailsPropertyBinder {
         this.propertyFromValueCreator = propertyFromValueCreator;
     }
 
-    public void bindProperty(PersistentClass persistentClass
+    public Value bindProperty(PersistentClass persistentClass
             , @Nonnull GrailsHibernatePersistentProperty currentGrailsProp
             , @Nonnull InFlightMetadataCollector mappings
             , String sessionFactoryBeanName) {
@@ -136,9 +135,9 @@ public class GrailsPropertyBinder {
             value = new ManyToOne(metadataBuildingContext, table);
             manyToOneBinder.bindManyToOne((Association)currentGrailsProp, 
(ManyToOne)value, EMPTY_PATH);
         }
-        else if (currentGrailsProp instanceof Embedded) {
+        else if (currentGrailsProp instanceof Embedded embedded) {
             value = new Component(metadataBuildingContext, persistentClass);
-            componentPropertyBinder.bindComponent((Component)value, 
(Embedded)currentGrailsProp, true, mappings, sessionFactoryBeanName);
+            componentPropertyBinder.bindComponent((Component)value, embedded, 
true, mappings, sessionFactoryBeanName);
         }
         // work out what type of relationship it is and bind value
         else { // Default BasicValue
@@ -146,9 +145,6 @@ public class GrailsPropertyBinder {
             simpleValueBinder.bindSimpleValue(currentGrailsProp, 
null,(SimpleValue) value, EMPTY_PATH);
         }
 
-        if (value != null) {
-            Property property = propertyFromValueCreator.createProperty(value, 
currentGrailsProp);
-            persistentClass.addProperty(property);
-        }
+        return value;
     }
 }
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ManyToOneBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ManyToOneBinder.java
index c3c0dee0d5..40c754aaa8 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ManyToOneBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ManyToOneBinder.java
@@ -4,7 +4,6 @@ import org.hibernate.MappingException;
 import org.hibernate.mapping.Column;
 import org.hibernate.mapping.ManyToOne;
 
-import org.grails.datastore.mapping.model.PersistentEntity;
 import org.grails.datastore.mapping.model.types.Association;
 import org.grails.datastore.mapping.model.types.ManyToMany;
 import org.grails.datastore.mapping.model.types.OneToOne;
@@ -57,21 +56,19 @@ public class ManyToOneBinder {
     public void bindManyToOne(Association property
             , ManyToOne manyToOne
             ,String path) {
+        GrailsHibernatePersistentProperty hibernateProperty = 
(GrailsHibernatePersistentProperty) property;
         manyToOneValuesBinder.bindManyToOneValues(property, manyToOne);
-        PersistentEntity refDomainClass = property instanceof ManyToMany ? 
property.getOwner() : property.getAssociatedEntity();
-        Mapping mapping = null;
-        if (refDomainClass instanceof GrailsHibernatePersistentEntity) {
-            mapping = ((GrailsHibernatePersistentEntity) 
refDomainClass).getMappedForm();
-        }
+        GrailsHibernatePersistentEntity refDomainClass = 
(GrailsHibernatePersistentEntity) (property instanceof ManyToMany ? 
property.getOwner() : property.getAssociatedEntity());
+        Mapping mapping = refDomainClass.getMappedForm();
 
         boolean isComposite = mapping != null && 
mapping.hasCompositeIdentifier();
         if (isComposite) {
             CompositeIdentity ci = (CompositeIdentity) mapping.getIdentity();
-            
compositeIdentifierToManyToOneBinder.bindCompositeIdentifierToManyToOne((GrailsHibernatePersistentProperty)
 property, manyToOne, ci, refDomainClass, path);
+            
compositeIdentifierToManyToOneBinder.bindCompositeIdentifierToManyToOne(hibernateProperty,
 manyToOne, ci, refDomainClass, path);
         }
         else {
             if (property.isCircular() && (property instanceof ManyToMany)) {
-                PropertyConfig pc = ((GrailsHibernatePersistentProperty) 
property).getMappedForm();
+                PropertyConfig pc = hibernateProperty.getMappedForm();
 
                 if (mapping != null && pc.getColumns().isEmpty()) {
                     mapping.getColumns().put(property.getName(), pc);
@@ -84,16 +81,16 @@ public class ManyToOneBinder {
                     pc.setJoinTable(jt);
                 }
                 // set type
-                
simpleValueBinder.bindSimpleValue((GrailsHibernatePersistentProperty) property, 
null, manyToOne, path);
+                simpleValueBinder.bindSimpleValue(hibernateProperty, null, 
manyToOne, path);
             }
             else {
                 // bind column
                 // set type
-                
simpleValueBinder.bindSimpleValue((GrailsHibernatePersistentProperty) property, 
null, manyToOne, path);
+                simpleValueBinder.bindSimpleValue(hibernateProperty, null, 
manyToOne, path);
             }
         }
 
-        PropertyConfig config = ((GrailsHibernatePersistentProperty) 
property).getMappedForm();
+        PropertyConfig config = hibernateProperty.getMappedForm();
         boolean isOneToOne = property instanceof OneToOne;
         boolean notComposite = !isComposite;
         if (isOneToOne && notComposite) {
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/VersionBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/VersionBinder.java
index ac07455fb5..e3fcb4c4d4 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/VersionBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/VersionBinder.java
@@ -7,7 +7,6 @@ import org.hibernate.mapping.Property;
 import org.hibernate.mapping.RootClass;
 import org.hibernate.mapping.Table;
 
-import org.grails.datastore.mapping.model.PersistentProperty;
 import org.grails.orm.hibernate.cfg.GrailsHibernatePersistentProperty;
 import org.grails.orm.hibernate.cfg.PersistentEntityNamingStrategy;
 
@@ -39,21 +38,21 @@ public class VersionBinder {
         this.basicValueFactory = basicValueFactory;
     }
 
-    public void bindVersion(PersistentProperty version, RootClass entity) {
+    public void bindVersion(GrailsHibernatePersistentProperty version, 
RootClass entity) {
 
         if (version != null) {
 
             BasicValue val = basicValueFactory.apply(metadataBuildingContext, 
entity.getTable());
 
             // set type
-            
simpleValueBinder.bindSimpleValue((GrailsHibernatePersistentProperty) version, 
null, val, EMPTY_PATH);
+            simpleValueBinder.bindSimpleValue(version, null, val, EMPTY_PATH);
 
             if (!val.isTypeSpecified()) {
                 val.setTypeName("version".equals(version.getName()) ? 
"integer" : "timestamp");
             }
             Property prop = new Property();
             prop.setValue(val);
-            propertyBinder.bindProperty((GrailsHibernatePersistentProperty) 
version, prop);
+            propertyBinder.bindProperty(version, prop);
             prop.setLazy(false);
             val.setNullValue("undefined");
             entity.setVersion(prop);
@@ -65,4 +64,4 @@ public class VersionBinder {
             entity.setOptimisticLockStyle(OptimisticLockStyle.NONE);
         }
     }
-}
\ No newline at end of file
+}
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 8714839bba..3c180cf98d 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
@@ -2,7 +2,6 @@ package org.grails.orm.hibernate.cfg.domainbinding.secondpass;
 
 import jakarta.annotation.Nonnull;
 import org.grails.datastore.mapping.model.DatastoreConfigurationException;
-import org.grails.datastore.mapping.model.PersistentEntity;
 import org.grails.datastore.mapping.model.PersistentProperty;
 import org.grails.datastore.mapping.model.config.GormProperties;
 import org.grails.datastore.mapping.model.types.Association;
@@ -77,7 +76,7 @@ public class CollectionSecondPassBinder {
                         "] are not supported with unidirectional one to many 
relationships.");
             }
             if (referenced != null) {
-                PersistentProperty propertyToSortBy = 
referenced.getPropertyByName(propConfig.getSort());
+                GrailsHibernatePersistentProperty propertyToSortBy = 
(GrailsHibernatePersistentProperty) 
referenced.getPropertyByName(propConfig.getSort());
 
                 String associatedClassName = referenced.getName();
 
@@ -136,7 +135,7 @@ public class CollectionSecondPassBinder {
         }
 
         // setup the primary key references
-        DependantValue key = createPrimaryKeyValue(mappings, property, 
collection, persistentClasses);
+        DependantValue key = createPrimaryKeyValue(mappings, property, 
collection);
 
         // link a bidirectional relationship
         if (property.isBidirectional()) {
@@ -184,7 +183,7 @@ public class CollectionSecondPassBinder {
                 if (LOG.isDebugEnabled())
                     LOG.debug("[CollectionSecondPassBinder] Mapping other side 
" + otherSide.getOwner().getName() + "." + otherSide.getName() + " -> " + 
collection.getCollectionTable().getName() + " as ManyToOne");
                 ManyToOne element = new ManyToOne(metadataBuildingContext, 
collection.getCollectionTable());
-                bindManyToMany((Association)otherSide, element, mappings, 
sessionFactoryBeanName);
+                bindManyToMany((Association)otherSide, element);
                 collection.setElement(element);
                 new 
CollectionForPropertyConfigBinder().bindCollectionForPropertyConfig(collection, 
propConfig);
                 if (property.isCircular()) {
@@ -198,14 +197,14 @@ public class CollectionSecondPassBinder {
             // there are problems with list and map mappings and join columns 
relating to duplicate key constraints
             // TODO change this when HHH-1268 is resolved
             if (!property.shouldBindWithForeignKey()) {
-                bindCollectionWithJoinTable(property, mappings, collection, 
propConfig, sessionFactoryBeanName);
+                bindCollectionWithJoinTable(property, mappings, collection, 
propConfig);
             } else {
                 
bindUnidirectionalOneToMany((org.grails.datastore.mapping.model.types.OneToMany)
 property, mappings, collection);
             }
         } else if (property.supportsJoinColumnMapping()) {
-            bindCollectionWithJoinTable(property, mappings, collection, 
propConfig, sessionFactoryBeanName);
+            bindCollectionWithJoinTable(property, mappings, collection, 
propConfig);
         }
-        forceNullableAndCheckUpdateable(key, property, mappings);
+        forceNullableAndCheckUpdateable(key, property);
     }
 
     private void 
bindUnidirectionalOneToMany(org.grails.datastore.mapping.model.types.OneToMany 
property, @Nonnull InFlightMetadataCollector mappings, Collection collection) {
@@ -222,7 +221,7 @@ public class CollectionSecondPassBinder {
         collection.setInverse(false);
         PersistentClass referenced = mappings.getEntityBinding(entityName);
         Backref prop = new Backref();
-        PersistentEntity owner = property.getOwner();
+        GrailsHibernatePersistentEntity owner = 
(GrailsHibernatePersistentEntity) property.getOwner();
         prop.setEntityName(owner.getName());
         String s2 = property.getName();
         prop.setName(UNDERSCORE + new 
BackticksRemover().apply(owner.getJavaClass().getSimpleName()) + UNDERSCORE + 
new BackticksRemover().apply(s2) + "Backref");
@@ -236,7 +235,7 @@ public class CollectionSecondPassBinder {
     }
 
     private void bindCollectionWithJoinTable(HibernateToManyProperty property,
-                                             @Nonnull 
InFlightMetadataCollector mappings, Collection collection, PropertyConfig 
config, String sessionFactoryBeanName) {
+                                             @Nonnull 
InFlightMetadataCollector mappings, Collection collection, PropertyConfig 
config) {
 
         collection.setInverse(false);
         SimpleValue element;
@@ -305,14 +304,14 @@ public class CollectionSecondPassBinder {
             }
             if (m != null && m.hasCompositeIdentifier()) {
                 CompositeIdentity ci = (CompositeIdentity) m.getIdentity();
-                new 
CompositeIdentifierToManyToOneBinder(namingStrategy).bindCompositeIdentifierToManyToOne((GrailsHibernatePersistentProperty)
 property, element, ci, domainClass, EMPTY_PATH);
+                new 
CompositeIdentifierToManyToOneBinder(namingStrategy).bindCompositeIdentifierToManyToOne(property,
 element, ci, domainClass, EMPTY_PATH);
             }
             else {
                 if (joinColumnMappingOptional.isPresent()) {
                     columnName = joinColumnMappingOptional.get().getName();
                 }
                 else {
-                    var decapitalize = 
domainClass.getRootEntity().getJavaClass().getSimpleName();
+                    var decapitalize = 
domainClass.getHibernateRootEntity().getJavaClass().getSimpleName();
                     columnName = 
namingStrategy.resolveColumnName(decapitalize) + FOREIGN_KEY_SUFFIX;
                 }
 
@@ -342,8 +341,7 @@ public class CollectionSecondPassBinder {
         
manyToOne.setReferencedEntityName(property.getHibernateAssociatedEntity().getName());
     }
 
-    private void bindManyToMany(Association property, ManyToOne element,
-                                @Nonnull InFlightMetadataCollector mappings, 
String sessionFactoryBeanName) {
+    private void bindManyToMany(Association property, ManyToOne element) {
         new ManyToOneBinder(namingStrategy).bindManyToOne(property, element, 
EMPTY_PATH);
         element.setReferencedEntityName(property.getOwner().getName());
     }
@@ -355,28 +353,25 @@ public class CollectionSecondPassBinder {
             LOG.debug("[CollectionSecondPassBinder] binding  [" + 
property.getName() + "] with dependant key");
         }
 
-        PersistentEntity refDomainClass = property.getOwner();
-        Mapping mapping = null;
-        if (refDomainClass instanceof GrailsHibernatePersistentEntity 
persistentEntity) {
-            mapping = persistentEntity.getMappedForm();
-        }
+        GrailsHibernatePersistentEntity refDomainClass = 
property.getHibernateOwner();
+        Mapping mapping = refDomainClass.getMappedForm();
         boolean hasCompositeIdentifier = mapping != null && 
mapping.hasCompositeIdentifier();
         if (hasCompositeIdentifier && property.supportsJoinColumnMapping()) {
             CompositeIdentity ci = (CompositeIdentity) mapping.getIdentity();
-            new 
CompositeIdentifierToManyToOneBinder(namingStrategy).bindCompositeIdentifierToManyToOne((GrailsHibernatePersistentProperty)
 property, key, ci, refDomainClass, EMPTY_PATH);
+            new 
CompositeIdentifierToManyToOneBinder(namingStrategy).bindCompositeIdentifierToManyToOne(property,
 key, ci, refDomainClass, EMPTY_PATH);
         }
         else {
             // set type
-            GrailsHibernatePersistentProperty identity = 
(GrailsHibernatePersistentProperty) refDomainClass.getIdentity();
+            GrailsHibernatePersistentProperty identity = 
refDomainClass.getIdentity();
             if (identity != null) {
-                new 
SimpleValueBinder(namingStrategy).bindSimpleValue((GrailsHibernatePersistentProperty)
 property, null, key, EMPTY_PATH, identity);
+                new 
SimpleValueBinder(namingStrategy).bindSimpleValue(property, null, key, 
EMPTY_PATH, identity);
             } else {
-                new 
SimpleValueBinder(namingStrategy).bindSimpleValue((GrailsHibernatePersistentProperty)
 property, null, key, EMPTY_PATH);
+                new 
SimpleValueBinder(namingStrategy).bindSimpleValue(property, null, key, 
EMPTY_PATH);
             }
         }
     }
 
-    private void linkBidirectionalOneToMany(Collection collection, 
PersistentClass associatedClass, DependantValue key, PersistentProperty 
otherSide) {
+    private void linkBidirectionalOneToMany(Collection collection, 
PersistentClass associatedClass, DependantValue key, 
GrailsHibernatePersistentProperty otherSide) {
         collection.setInverse(true);
 
         // Iterator mappedByColumns = 
associatedClass.getProperty(otherSide.getName()).getValue().getColumnIterator();
@@ -387,7 +382,7 @@ public class CollectionSecondPassBinder {
         }
     }
 
-    private void linkValueUsingAColumnCopy(PersistentProperty prop, Column 
column, DependantValue key) {
+    private void linkValueUsingAColumnCopy(GrailsHibernatePersistentProperty 
prop, Column column, DependantValue key) {
         Column mappingColumn = new Column();
         mappingColumn.setName(column.getName());
         mappingColumn.setLength(column.getLength());
@@ -412,7 +407,7 @@ public class CollectionSecondPassBinder {
         }
     }
 
-    private void forceNullableAndCheckUpdateable(DependantValue key, 
PersistentProperty property, InFlightMetadataCollector mappings) {
+    private void forceNullableAndCheckUpdateable(DependantValue key, 
GrailsHibernatePersistentProperty property) {
         Iterator<?> it = key.getColumns().iterator();
         while (it.hasNext()) {
             Object next = it.next();
@@ -422,8 +417,8 @@ public class CollectionSecondPassBinder {
         }
         
         int unidirectionalCount = 0;
-        PersistentEntity owner = property.getOwner();
-        for (PersistentProperty p : owner.getPersistentProperties()) {
+        GrailsHibernatePersistentEntity owner = property.getHibernateOwner();
+        for (GrailsHibernatePersistentProperty p : 
owner.getPersistentPropertiesToBind()) {
             if (p instanceof Association association && 
!association.isBidirectional()) {
                 unidirectionalCount++;
             }
@@ -436,8 +431,8 @@ public class CollectionSecondPassBinder {
         }
     }
 
-    private DependantValue createPrimaryKeyValue(@Nonnull 
InFlightMetadataCollector mappings, PersistentProperty property,
-                                                 Collection collection, 
java.util.Map<?, ?> persistentClasses) {
+    private DependantValue createPrimaryKeyValue(@Nonnull 
InFlightMetadataCollector mappings, GrailsHibernatePersistentProperty property,
+                                                 Collection collection) {
         KeyValue keyValue;
         DependantValue key;
         String propertyRef = collection.getReferencedPropertyName();
diff --git 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/GrailsPropertyBinderSpec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/GrailsPropertyBinderSpec.groovy
index 9c726bdbb5..18357514fd 100644
--- 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/GrailsPropertyBinderSpec.groovy
+++ 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/GrailsPropertyBinderSpec.groovy
@@ -322,7 +322,8 @@ class GrailsPropertyBinderSpec extends 
HibernateGormDatastoreSpec {
                 simpleValueBinder,
                 columnNameForPropertyAndPathFetcher,
                 oneToOneBinder,
-                manyToOneBinder
+                manyToOneBinder,
+                propertyFromValueCreator
         )
 
         def mappings = Mock(org.hibernate.boot.spi.InFlightMetadataCollector)


Reply via email to