This is an automated email from the ASF dual-hosted git repository. borinquenkid pushed a commit to branch 8.0.x-hibernate7-dev in repository https://gitbox.apache.org/repos/asf/grails-core.git
commit 6588810b5ee427e4281a696685c4165f7f9ff653 Author: Walter Duque de Estrada <[email protected]> AuthorDate: Wed Mar 4 18:48:54 2026 -0600 cleanup(hibernate7): Remove unused InFlightMetadataCollector from ComponentBinder, simplify ComponentUpdater.updateComponen --- .../binder/ClassPropertiesBinder.java | 16 ++++- .../cfg/domainbinding/binder/ComponentBinder.java | 10 ++-- .../cfg/domainbinding/binder/ComponentUpdater.java | 12 ++-- .../cfg/domainbinding/binder/EnumTypeBinder.java | 6 +- .../domainbinding/binder/GrailsDomainBinder.java | 2 +- .../domainbinding/binder/GrailsPropertyBinder.java | 4 +- .../hibernate/GrailsHibernatePersistentEntity.java | 7 ++- .../cfg/domainbinding/CollectionBinderSpec.groovy | 3 +- .../cfg/domainbinding/ComponentBinderSpec.groovy | 3 +- .../domainbinding/GrailsPropertyBinderSpec.groovy | 3 +- .../binder/ComponentUpdaterSpec.groovy | 70 +++++++++++++--------- .../secondpass/ListSecondPassBinderSpec.groovy | 3 +- .../secondpass/MapSecondPassBinderSpec.groovy | 3 +- 13 files changed, 85 insertions(+), 57 deletions(-) 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 68dc35b9f0..a25a6eb841 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 @@ -22,6 +22,8 @@ import jakarta.annotation.Nonnull; import org.grails.orm.hibernate.cfg.domainbinding.hibernate.GrailsHibernatePersistentEntity; import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernatePersistentProperty; import org.grails.orm.hibernate.cfg.domainbinding.util.PropertyFromValueCreator; + +import org.hibernate.MappingException; import org.hibernate.mapping.PersistentClass; import org.hibernate.mapping.Table; import org.hibernate.mapping.Value; @@ -59,9 +61,9 @@ public class ClassPropertiesBinder { public void bindClassProperties( @Nonnull GrailsHibernatePersistentEntity domainClass, PersistentClass persistentClass) { + @Nonnull Table table = getTable(persistentClass); + table.setComment(domainClass.getComment()); - persistentClass.getTable().setComment(domainClass.getMappedForm().getComment()); - Table table = persistentClass.getTable(); for (HibernatePersistentProperty currentGrailsProp : domainClass.getPersistentPropertiesToBind()) { @@ -78,4 +80,14 @@ public class ClassPropertiesBinder { naturalIdentifierBinder.bindNaturalIdentifier(domainClass.getMappedForm(), persistentClass); } + + @Nonnull private Table getTable(PersistentClass persistentClass) { + if(persistentClass.getTable() == null) { + throw new MappingException( + "Persistent class [" + + persistentClass.getEntityName() + + "] does not have a table associated with it"); + } + return persistentClass.getTable(); + } } 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 8765653017..a10705ab91 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 @@ -18,12 +18,13 @@ */ package org.grails.orm.hibernate.cfg.domainbinding.binder; +import jakarta.annotation.Nonnull; + import org.grails.orm.hibernate.cfg.GrailsHibernateUtil; import org.grails.orm.hibernate.cfg.MappingCacheHolder; import org.grails.orm.hibernate.cfg.domainbinding.hibernate.GrailsHibernatePersistentEntity; import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateEmbeddedProperty; import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernatePersistentProperty; -import org.hibernate.boot.spi.InFlightMetadataCollector; import org.hibernate.boot.spi.MetadataBuildingContext; import org.hibernate.mapping.Component; import org.hibernate.mapping.PersistentClass; @@ -35,18 +36,15 @@ public class ComponentBinder { private final MetadataBuildingContext metadataBuildingContext; private final MappingCacheHolder mappingCacheHolder; private final ComponentUpdater componentUpdater; - private final InFlightMetadataCollector metadataCollector; private GrailsPropertyBinder grailsPropertyBinder; public ComponentBinder( MetadataBuildingContext metadataBuildingContext, MappingCacheHolder mappingCacheHolder, - ComponentUpdater componentUpdater, - InFlightMetadataCollector metadataCollector) { + ComponentUpdater componentUpdater) { this.metadataBuildingContext = metadataBuildingContext; this.mappingCacheHolder = mappingCacheHolder; this.componentUpdater = componentUpdater; - this.metadataCollector = metadataCollector; } public void setGrailsPropertyBinder(GrailsPropertyBinder grailsPropertyBinder) { @@ -55,7 +53,7 @@ public class ComponentBinder { public Component bindComponent( PersistentClass owner, - HibernateEmbeddedProperty embeddedProperty, + @Nonnull HibernateEmbeddedProperty embeddedProperty, String path) { Component component = new Component(metadataBuildingContext, owner); Class<?> type = embeddedProperty.getType(); diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ComponentUpdater.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ComponentUpdater.java index 66bbb44fc9..996f8640a3 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ComponentUpdater.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ComponentUpdater.java @@ -42,14 +42,10 @@ public class ComponentUpdater { Value value) { 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); - } + if (componentProperty != null && componentProperty.getHibernateOwner().isComponentPropertyNullable(componentProperty)) { + for (Column c : value.getColumns()) { + c.setNullable(true); + } } } } diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/EnumTypeBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/EnumTypeBinder.java index 8c9eb0efb3..6604be594e 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/EnumTypeBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/EnumTypeBinder.java @@ -20,6 +20,7 @@ package org.grails.orm.hibernate.cfg.domainbinding.binder; import static org.grails.orm.hibernate.cfg.domainbinding.binder.GrailsDomainBinder.ENUM_CLASS_PROP; +import jakarta.annotation.Nonnull; import jakarta.persistence.EnumType; import java.util.Properties; import org.grails.orm.hibernate.cfg.ColumnConfig; @@ -66,7 +67,10 @@ public class EnumTypeBinder { private static final Logger LOG = LoggerFactory.getLogger(EnumTypeBinder.class); public BasicValue bindEnumType( - HibernatePersistentProperty property, Class<?> propertyType, Table table, String path) { + @Nonnull HibernatePersistentProperty property + , Class<?> propertyType + , Table table + , String path) { BasicValue simpleValue = new BasicValue(metadataBuildingContext, table); String columnName = columnNameForPropertyAndPathFetcher.getColumnNameForPropertyAndPath(property, path, null); diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/GrailsDomainBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/GrailsDomainBinder.java index 048022b202..2e00e23af4 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/GrailsDomainBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/GrailsDomainBinder.java @@ -159,7 +159,7 @@ public class GrailsDomainBinder implements AdditionalMappingContributor, TypeCon metadataCollector); ComponentUpdater componentUpdater = new ComponentUpdater(propertyFromValueCreator); ComponentBinder componentBinder = - new ComponentBinder(metadataBuildingContext, getMappingCacheHolder(), componentUpdater, metadataCollector); + new ComponentBinder(metadataBuildingContext, getMappingCacheHolder(), componentUpdater); GrailsPropertyBinder grailsPropertyBinder = new GrailsPropertyBinder( 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 75ed9937ce..19f1ea72af 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 @@ -19,6 +19,8 @@ package org.grails.orm.hibernate.cfg.domainbinding.binder; import jakarta.annotation.Nonnull; +import jakarta.annotation.Nullable; + import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateEmbeddedProperty; import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateEnumProperty; import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateManyToOneProperty; @@ -62,7 +64,7 @@ public class GrailsPropertyBinder { } public Value bindProperty( - PersistentClass persistentClass, + @Nullable PersistentClass persistentClass, Table table, String path, HibernatePersistentProperty parentProperty, diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/GrailsHibernatePersistentEntity.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/GrailsHibernatePersistentEntity.java index 0337ab1acb..c6369eb3b0 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/GrailsHibernatePersistentEntity.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/GrailsHibernatePersistentEntity.java @@ -306,5 +306,10 @@ public interface GrailsHibernatePersistentEntity extends PersistentEntity { }); return properties; } - ; + + default String getComment() { + return Optional.ofNullable(getMappedForm()) + .map(Mapping::getComment) + .orElse(null); + } } diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/CollectionBinderSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/CollectionBinderSpec.groovy index 945bf05dd5..65d5e1bab6 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/CollectionBinderSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/CollectionBinderSpec.groovy @@ -93,8 +93,7 @@ class CollectionBinderSpec extends HibernateGormDatastoreSpec { ComponentBinder componentBinder = new ComponentBinder( metadataBuildingContext, binder.getMappingCacheHolder(), - componentUpdater, - collector + componentUpdater ) GrailsPropertyBinder propertyBinder = new GrailsPropertyBinder( diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ComponentBinderSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ComponentBinderSpec.groovy index 352c4bb694..13f24d125f 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ComponentBinderSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ComponentBinderSpec.groovy @@ -79,8 +79,7 @@ class ComponentBinderSpec extends HibernateGormDatastoreSpec { binder = new ComponentBinder( metadataBuildingContext, mappingCacheHolder, - componentUpdater, - metadataBuildingContext.getMetadataCollector() + componentUpdater ) binder.setGrailsPropertyBinder(grailsPropertyBinder) } 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 563d7d768b..6d8f7dc9b5 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 @@ -158,8 +158,7 @@ class GrailsPropertyBinderSpec extends HibernateGormDatastoreSpec { ComponentBinder componentBinder = new ComponentBinder( metadataBuildingContext, binder.getMappingCacheHolder(), - componentUpdater, - collector + componentUpdater ) GrailsPropertyBinder propertyBinder = new GrailsPropertyBinder( diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ComponentUpdaterSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ComponentUpdaterSpec.groovy index 227cc42f4a..7bdcb9646f 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ComponentUpdaterSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ComponentUpdaterSpec.groovy @@ -1,7 +1,9 @@ package org.grails.orm.hibernate.cfg.domainbinding.binder +import grails.gorm.annotation.Entity +import grails.gorm.hibernate.HibernateEntity import grails.gorm.specs.HibernateGormDatastoreSpec -import org.grails.orm.hibernate.cfg.domainbinding.hibernate.GrailsHibernatePersistentEntity +import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateEmbeddedProperty import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernatePersistentProperty import org.grails.orm.hibernate.cfg.domainbinding.util.PropertyFromValueCreator import org.hibernate.mapping.BasicValue @@ -18,6 +20,10 @@ class ComponentUpdaterSpec extends HibernateGormDatastoreSpec { @Subject ComponentUpdater updater + def setupSpec() { + manager.addAllDomainClasses([CUPerson, CUAddress]) + } + def setup() { updater = new ComponentUpdater(propertyFromValueCreator) } @@ -27,27 +33,24 @@ class ComponentUpdaterSpec extends HibernateGormDatastoreSpec { def metadataBuildingContext = getGrailsDomainBinder().getMetadataBuildingContext() def root = new RootClass(metadataBuildingContext) def component = new Component(metadataBuildingContext, root) - - def componentProperty = Mock(HibernatePersistentProperty) - def currentGrailsProp = Mock(HibernatePersistentProperty) + + def personEntity = mappingContext.getPersistentEntity(CUPerson.name) + HibernateEmbeddedProperty componentProperty = personEntity.persistentProperties.find { it.name == 'address' } as HibernateEmbeddedProperty + HibernatePersistentProperty streetProp = componentProperty.associatedEntity.persistentProperties.find { it.name == 'street' } as HibernatePersistentProperty + def value = new BasicValue(metadataBuildingContext, root.getTable()) - def column = new Column("test_col") + def column = new Column("street") value.addColumn(column) - def hibernateProperty = new Property() - hibernateProperty.setName("testProp") - - def ownerEntity = Mock(GrailsHibernatePersistentEntity) - componentProperty.getOwner() >> ownerEntity - ownerEntity.isComponentPropertyNullable(componentProperty) >> true + hibernateProperty.setName("street") when: - updater.updateComponent(component, componentProperty, currentGrailsProp, value) + updater.updateComponent(component, componentProperty, streetProp, value) then: - 1 * propertyFromValueCreator.createProperty(value, currentGrailsProp) >> hibernateProperty - component.getProperty("testProp") == hibernateProperty - column.isNullable() + 1 * propertyFromValueCreator.createProperty(value, streetProp) >> hibernateProperty + component.getProperty("street") == hibernateProperty + column.isNullable() // address is nullable on CUPerson } def "should not set columns nullable if component property is not nullable"() { @@ -55,26 +58,39 @@ class ComponentUpdaterSpec extends HibernateGormDatastoreSpec { def metadataBuildingContext = getGrailsDomainBinder().getMetadataBuildingContext() def root = new RootClass(metadataBuildingContext) def component = new Component(metadataBuildingContext, root) - - def componentProperty = Mock(HibernatePersistentProperty) - def currentGrailsProp = Mock(HibernatePersistentProperty) + + def personEntity = mappingContext.getPersistentEntity(CUPerson.name) + HibernateEmbeddedProperty componentProperty = personEntity.persistentProperties.find { it.name == 'requiredAddress' } as HibernateEmbeddedProperty + HibernatePersistentProperty streetProp = componentProperty.associatedEntity.persistentProperties.find { it.name == 'street' } as HibernatePersistentProperty + def value = new BasicValue(metadataBuildingContext, root.getTable()) - def column = new Column("test_col") + def column = new Column("street") column.setNullable(false) value.addColumn(column) - def hibernateProperty = new Property() - hibernateProperty.setName("testProp") - - def ownerEntity = Mock(GrailsHibernatePersistentEntity) - componentProperty.getOwner() >> ownerEntity - ownerEntity.isComponentPropertyNullable(componentProperty) >> false + hibernateProperty.setName("street") when: - updater.updateComponent(component, componentProperty, currentGrailsProp, value) + updater.updateComponent(component, componentProperty, streetProp, value) then: - 1 * propertyFromValueCreator.createProperty(value, currentGrailsProp) >> hibernateProperty + 1 * propertyFromValueCreator.createProperty(value, streetProp) >> hibernateProperty !column.isNullable() } } + +class CUAddress { + String street + String city +} + +@Entity +class CUPerson implements HibernateEntity<CUPerson> { + CUAddress address + CUAddress requiredAddress + static embedded = ['address', 'requiredAddress'] + static constraints = { + address nullable: true + requiredAddress nullable: false + } +} diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/ListSecondPassBinderSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/ListSecondPassBinderSpec.groovy index 19a63afb81..5b6fd92cc8 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/ListSecondPassBinderSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/ListSecondPassBinderSpec.groovy @@ -92,8 +92,7 @@ class ListSecondPassBinderSpec extends HibernateGormDatastoreSpec { ComponentBinder componentBinder = new ComponentBinder( metadataBuildingContext, binder.getMappingCacheHolder(), - componentUpdater, - getCollector() + componentUpdater ) GrailsPropertyBinder propertyBinder = new GrailsPropertyBinder( diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/MapSecondPassBinderSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/MapSecondPassBinderSpec.groovy index cdff3a07c2..8e9c9e65f6 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/MapSecondPassBinderSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/MapSecondPassBinderSpec.groovy @@ -92,8 +92,7 @@ class MapSecondPassBinderSpec extends HibernateGormDatastoreSpec { ComponentBinder componentBinder = new ComponentBinder( metadataBuildingContext, binder.getMappingCacheHolder(), - componentUpdater, - getCollector() + componentUpdater ) GrailsPropertyBinder propertyBinder = new GrailsPropertyBinder(
