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 707490c275892aae9042874723b2293aca982581 Author: Walter Duque de Estrada <[email protected]> AuthorDate: Fri Feb 6 19:03:54 2026 -0600 progress --- .../orm/hibernate/cfg/GrailsDomainBinder.java | 29 +---------------- .../cfg/domainbinding/ComponentPropertyBinder.java | 19 +++++------ .../cfg/domainbinding/GrailsPropertyBinder.java | 5 ++- .../domainbinding/GrailsPropertyBinderSpec.groovy | 38 ++++++---------------- 4 files changed, 21 insertions(+), 70 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 031465217d..9e8769918c 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 @@ -17,13 +17,9 @@ package org.grails.orm.hibernate.cfg; import groovy.lang.Closure; import org.grails.datastore.mapping.core.connections.ConnectionSource; -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; -import org.grails.datastore.mapping.model.types.Basic; -import org.grails.datastore.mapping.model.types.ManyToMany; import org.grails.datastore.mapping.model.types.TenantId; import org.grails.orm.hibernate.cfg.domainbinding.ClassBinder; import org.grails.orm.hibernate.cfg.domainbinding.ColumnConfigToColumnBinder; @@ -32,66 +28,43 @@ import org.grails.orm.hibernate.cfg.domainbinding.NamingStrategyProvider; import org.grails.orm.hibernate.cfg.domainbinding.SimpleValueColumnBinder; import org.grails.orm.hibernate.cfg.domainbinding.*; import org.grails.orm.hibernate.cfg.domainbinding.collectionType.CollectionHolder; -import org.grails.orm.hibernate.cfg.domainbinding.collectionType.CollectionType; -import org.grails.orm.hibernate.cfg.domainbinding.secondpass.GrailsCollectionSecondPass; -import org.grails.orm.hibernate.cfg.domainbinding.secondpass.ListSecondPass; -import org.grails.orm.hibernate.cfg.domainbinding.secondpass.MapSecondPass; import org.checkerframework.checker.nullness.qual.NonNull; -import org.hibernate.FetchMode; import org.hibernate.MappingException; import org.hibernate.boot.ResourceStreamLocator; import org.hibernate.boot.internal.MetadataBuildingContextRootImpl; import org.hibernate.boot.internal.RootMappingDefaults; import org.hibernate.boot.model.TypeContributions; import org.hibernate.boot.model.TypeContributor; -import org.hibernate.boot.model.internal.BinderHelper; import org.hibernate.boot.spi.AdditionalMappingContributions; import org.hibernate.boot.spi.AdditionalMappingContributor; import org.hibernate.boot.spi.InFlightMetadataCollector; import org.hibernate.boot.spi.MetadataBuildingContext; import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment; import org.hibernate.engine.spi.FilterDefinition; -import org.hibernate.mapping.Backref; import org.hibernate.mapping.BasicValue; import org.hibernate.mapping.Collection; import org.hibernate.mapping.Column; -import org.hibernate.mapping.Component; import org.hibernate.mapping.DependantValue; import org.hibernate.mapping.Formula; -import org.hibernate.mapping.IndexBackref; -import org.hibernate.mapping.IndexedCollection; import org.hibernate.mapping.JoinedSubclass; -import org.hibernate.mapping.KeyValue; -import org.hibernate.mapping.ManyToOne; import org.hibernate.mapping.OneToMany; import org.hibernate.mapping.PersistentClass; import org.hibernate.mapping.Property; import org.hibernate.mapping.RootClass; -import org.hibernate.mapping.Selectable; import org.hibernate.mapping.SimpleValue; import org.hibernate.mapping.SingleTableSubclass; import org.hibernate.mapping.Subclass; import org.hibernate.mapping.Table; import org.hibernate.mapping.UnionSubclass; -import org.hibernate.mapping.Value; import org.hibernate.metamodel.mapping.JdbcMapping; import org.hibernate.service.ServiceRegistry; -import org.hibernate.type.StandardBasicTypes; -import org.hibernate.type.Type; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.util.StringUtils; -import java.util.ArrayList; import java.util.Collections; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; import java.util.Map; -import java.util.Set; import java.util.Optional; -import java.util.StringTokenizer; import jakarta.annotation.Nonnull; @@ -694,7 +667,7 @@ public class GrailsDomainBinder for (GrailsHibernatePersistentProperty currentGrailsProp : domainClass.getPersistentPropertiesToBind()) { - var value = grailsPropertyBinder.bindProperty(persistentClass, mappings, sessionFactoryBeanName, currentGrailsProp); + var value = grailsPropertyBinder.bindProperty(persistentClass, currentGrailsProp, mappings, sessionFactoryBeanName); persistentClass.addProperty(propertyFromValueCreator.createProperty(value, currentGrailsProp)); } diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/ComponentPropertyBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/ComponentPropertyBinder.java index 7d13e431a2..f37a487239 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/ComponentPropertyBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/ComponentPropertyBinder.java @@ -92,8 +92,7 @@ public class ComponentPropertyBinder { CollectionType collectionType = collectionHolder.get(currentGrailsProp.getType()); if (collectionType != null) { // create collection - Collection collection = collectionType.create((HibernateToManyProperty) currentGrailsProp, persistentClass - ); + Collection collection = collectionType.create((HibernateToManyProperty) currentGrailsProp, persistentClass); collectionBinder.bindCollection((HibernateToManyProperty) currentGrailsProp, collection, persistentClass, mappings, path, sessionFactoryBeanName); mappings.addCollectionBinding(collection); value = collection; @@ -137,15 +136,13 @@ public class ComponentPropertyBinder { } } - if (value != null) { - 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(); - while (columnIterator.hasNext()) { - Column c = (Column) columnIterator.next(); - c.setNullable(true); - } + 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(); + while (columnIterator.hasNext()) { + Column c = (Column) columnIterator.next(); + c.setNullable(true); } } } diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/GrailsPropertyBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/GrailsPropertyBinder.java index 604b123e91..2f5e65a02b 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/GrailsPropertyBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/GrailsPropertyBinder.java @@ -82,9 +82,8 @@ public class GrailsPropertyBinder { } public Value bindProperty(PersistentClass persistentClass - , @Nonnull InFlightMetadataCollector mappings - , String sessionFactoryBeanName - , @Nonnull GrailsHibernatePersistentProperty currentGrailsProp) { + , @Nonnull GrailsHibernatePersistentProperty currentGrailsProp, @Nonnull InFlightMetadataCollector mappings + , String sessionFactoryBeanName) { if (LOG.isDebugEnabled()) { LOG.debug("[GrailsPropertyBinder] Binding persistent property [" + currentGrailsProp.getName() + "]"); } 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 4552bc65f9..57005abbb9 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 @@ -11,26 +11,8 @@ import org.hibernate.mapping.RootClass import org.hibernate.mapping.SimpleValue import org.grails.orm.hibernate.cfg.PropertyConfig import org.grails.orm.hibernate.cfg.ColumnConfig -import org.grails.orm.hibernate.cfg.domainbinding.collectionType.CollectionHolder -import org.grails.orm.hibernate.cfg.domainbinding.collectionType.CollectionType -import org.hibernate.boot.spi.InFlightMetadataCollector -import org.hibernate.boot.spi.MetadataBuildingContext -import org.hibernate.mapping.BasicValue -import org.hibernate.mapping.Collection -import org.hibernate.mapping.Component -import org.hibernate.mapping.OneToOne -import org.hibernate.mapping.PersistentClass -import org.hibernate.mapping.Table -import org.hibernate.mapping.Value -import org.slf4j.Logger -import org.slf4j.LoggerFactory - -import java.util.Arrays -import java.util.HashMap -import java.util.Properties -import java.util.Optional -import static org.grails.orm.hibernate.cfg.GrailsDomainBinder.EMPTY_PATH +import org.hibernate.mapping.Value class GrailsPropertyBinderSpec extends HibernateGormDatastoreSpec { @@ -56,7 +38,7 @@ class GrailsPropertyBinderSpec extends HibernateGormDatastoreSpec { when: def titleProp = persistentEntity.getPropertyByName("title") as GrailsHibernatePersistentProperty - Value value = propertyBinder.bindProperty(rootClass, collector, "sessionFactory", titleProp) + Value value = propertyBinder.bindProperty(rootClass, titleProp, collector, "sessionFactory") rootClass.addProperty(binder.getPropertyFromValueCreator().createProperty(value, titleProp)) then: @@ -78,7 +60,7 @@ class GrailsPropertyBinderSpec extends HibernateGormDatastoreSpec { when: def statusProp = persistentEntity.getPropertyByName("status") as GrailsHibernatePersistentProperty - Value value = propertyBinder.bindProperty(rootClass, collector, "sessionFactory", statusProp) + Value value = propertyBinder.bindProperty(rootClass, statusProp, collector, "sessionFactory") rootClass.addProperty(binder.getPropertyFromValueCreator().createProperty(value, statusProp)) then: @@ -104,7 +86,7 @@ class GrailsPropertyBinderSpec extends HibernateGormDatastoreSpec { when: def ownerProp = petEntity.getPropertyByName("owner") as GrailsHibernatePersistentProperty - Value value = propertyBinder.bindProperty(rootClass, collector, "sessionFactory", ownerProp) + Value value = propertyBinder.bindProperty(rootClass, ownerProp, collector, "sessionFactory") rootClass.addProperty(binder.getPropertyFromValueCreator().createProperty(value, ownerProp)) then: @@ -127,7 +109,7 @@ class GrailsPropertyBinderSpec extends HibernateGormDatastoreSpec { when: def addressProp = persistentEntity.getPropertyByName("homeAddress") as GrailsHibernatePersistentProperty - Value value = propertyBinder.bindProperty(rootClass, collector, "sessionFactory", addressProp) + Value value = propertyBinder.bindProperty(rootClass, addressProp, collector, "sessionFactory") rootClass.addProperty(binder.getPropertyFromValueCreator().createProperty(value, addressProp)) then: @@ -155,7 +137,7 @@ class GrailsPropertyBinderSpec extends HibernateGormDatastoreSpec { when: def petsProp = personEntity.getPropertyByName("pets") as GrailsHibernatePersistentProperty - Value value = propertyBinder.bindProperty(rootClass, collector, "sessionFactory", petsProp) + Value value = propertyBinder.bindProperty(rootClass, petsProp, collector, "sessionFactory") rootClass.addProperty(binder.getPropertyFromValueCreator().createProperty(value, petsProp)) then: @@ -194,7 +176,7 @@ class GrailsPropertyBinderSpec extends HibernateGormDatastoreSpec { when: def booksProp = authorEntity.getPropertyByName("books") as GrailsHibernatePersistentProperty - Value value = propertyBinder.bindProperty(rootClass, collector, "sessionFactory", booksProp) + Value value = propertyBinder.bindProperty(rootClass, booksProp, collector, "sessionFactory") rootClass.addProperty(binder.getPropertyFromValueCreator().createProperty(value, booksProp)) collector.processSecondPasses(binder.getMetadataBuildingContext()) @@ -233,7 +215,7 @@ class GrailsPropertyBinderSpec extends HibernateGormDatastoreSpec { when: def booksProp = authorEntity.getPropertyByName("books") as GrailsHibernatePersistentProperty - Value value = propertyBinder.bindProperty(rootClass, collector, "sessionFactory", booksProp) + Value value = propertyBinder.bindProperty(rootClass, booksProp, collector, "sessionFactory") rootClass.addProperty(binder.getPropertyFromValueCreator().createProperty(value, booksProp)) collector.processSecondPasses(binder.getMetadataBuildingContext()) @@ -294,7 +276,7 @@ class GrailsPropertyBinderSpec extends HibernateGormDatastoreSpec { when: def childBookProp = authorEntity.getPropertyByName("childBook") as GrailsHibernatePersistentProperty - Value value = propertyBinder.bindProperty(rootClass, collector, "sessionFactory", childBookProp) + Value value = propertyBinder.bindProperty(rootClass, childBookProp, collector, "sessionFactory") rootClass.addProperty(binder.getPropertyFromValueCreator().createProperty(value, childBookProp)) // Process second passes to ensure Hibernate's internal mappings are finalized collector.processSecondPasses(binder.getMetadataBuildingContext()) @@ -365,7 +347,7 @@ class GrailsPropertyBinderSpec extends HibernateGormDatastoreSpec { when: // Capture the return value of bindProperty - def resultValue = propertyBinder.bindProperty(rootClass, mappings, "sessionFactory", currentGrailsProp) + def resultValue = propertyBinder.bindProperty(rootClass, currentGrailsProp, mappings, "sessionFactory") then: // Assert that bindProperty returns a Value object
