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();
