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 4e37db085a1e69bb866d4af41be3437d1b0239da
Author: Walter Duque de Estrada <[email protected]>
AuthorDate: Mon Feb 16 16:57:58 2026 -0600

    Encapsulate property sorting in GrailsHibernatePersistentEntity
    
    - Move property sorting logic into getHibernatePersistentProperties() to 
ensure HibernateEmbeddedProperty instances are always processed first.
    - Remove redundant sorting logic from ClassPropertiesBinder and 
ComponentBinder.
    - Ensure consistent property binding order across the system.
---
 .../orm/hibernate/cfg/GrailsHibernatePersistentEntity.java  | 13 +++++++++++--
 .../cfg/domainbinding/binder/ClassPropertiesBinder.java     | 12 +-----------
 .../hibernate/cfg/domainbinding/binder/ComponentBinder.java | 10 +---------
 3 files changed, 13 insertions(+), 22 deletions(-)

diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsHibernatePersistentEntity.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsHibernatePersistentEntity.java
index 9ad18b2ba9..8ad0b831c2 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsHibernatePersistentEntity.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsHibernatePersistentEntity.java
@@ -178,11 +178,20 @@ package org.grails.orm.hibernate.cfg;
     }
 
     default List<GrailsHibernatePersistentProperty> 
getHibernatePersistentProperties(){
-        return getPersistentProperties()
+        var properties = new java.util.ArrayList<>(getPersistentProperties()
                 .stream()
                 .filter(GrailsHibernatePersistentProperty.class::isInstance)
                 .map(GrailsHibernatePersistentProperty.class::cast)
-                .toList();
+                .toList());
+        properties.sort((p1, p2) -> {
+            if (p1 instanceof 
org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateEmbeddedProperty 
&& !(p2 instanceof 
org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateEmbeddedProperty))
 {
+                return -1;
+            } else if (!(p1 instanceof 
org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateEmbeddedProperty) 
&& p2 instanceof 
org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateEmbeddedProperty) 
{
+                return 1;
+            }
+            return p1.getName().compareTo(p2.getName());
+        });
+        return properties;
     };
 }
 
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ClassPropertiesBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ClassPropertiesBinder.java
index e5d7f99d06..a7efb25fcf 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ClassPropertiesBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ClassPropertiesBinder.java
@@ -51,17 +51,7 @@ public class ClassPropertiesBinder {
         
persistentClass.getTable().setComment(domainClass.getMappedForm().getComment());
         Table table = persistentClass.getTable();
 
-        List<GrailsHibernatePersistentProperty> properties = new 
ArrayList<>(domainClass.getPersistentPropertiesToBind());
-        properties.sort((p1, p2) -> {
-            if (p1 instanceof 
org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateEmbeddedProperty 
&& !(p2 instanceof 
org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateEmbeddedProperty))
 {
-                return -1;
-            } else if (!(p1 instanceof 
org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateEmbeddedProperty) 
&& p2 instanceof 
org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateEmbeddedProperty) 
{
-                return 1;
-            }
-            return p1.getName().compareTo(p2.getName());
-        });
-
-        for (GrailsHibernatePersistentProperty currentGrailsProp : properties) 
{
+        for (GrailsHibernatePersistentProperty currentGrailsProp : 
domainClass.getPersistentPropertiesToBind()) {
             Value value = grailsPropertyBinder.bindProperty(persistentClass, 
table, org.grails.orm.hibernate.cfg.GrailsDomainBinder.EMPTY_PATH, null, 
currentGrailsProp, mappings);
             
persistentClass.addProperty(propertyFromValueCreator.createProperty(value, 
currentGrailsProp));
         }
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 06f94232ef..879548c1ba 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
@@ -73,15 +73,7 @@ public class ComponentBinder {
 
         GrailsHibernatePersistentEntity domainClass = 
(GrailsHibernatePersistentEntity) embeddedProperty.getAssociatedEntity();
         mappingCacheHolder.cacheMapping(domainClass);
-        var peerProperties = new 
java.util.ArrayList<>(domainClass.getHibernatePersistentProperties());
-        peerProperties.sort((p1, p2) -> {
-            if (p1 instanceof HibernateEmbeddedProperty && !(p2 instanceof 
HibernateEmbeddedProperty)) {
-                return -1;
-            } else if (!(p1 instanceof HibernateEmbeddedProperty) && p2 
instanceof HibernateEmbeddedProperty) {
-                return 1;
-            }
-            return p1.getName().compareTo(p2.getName());
-        });
+        var peerProperties = domainClass.getHibernatePersistentProperties();
 
         Table table = component.getOwner().getTable();
         PersistentClass persistentClass = component.getOwner();

Reply via email to