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 a9d4b5fdbf27a7d7de692f7bb4c6f9edd9cc5756 Author: Walter Duque de Estrada <[email protected]> AuthorDate: Sat Feb 14 13:34:26 2026 -0600 Refactor defaultColumnNameFetcher in GrailsDomainBinder to be a local variable - Remove defaultColumnNameFetcher field and convert it to a local variable in the contribute method. - Update bindRoot, bindSubClass, createSubclassMapping, and addMultiTenantFilterIfNecessary to accept DefaultColumnNameFetcher as a parameter. - Update unit tests to pass DefaultColumnNameFetcher to the bindRoot method. --- .../orm/hibernate/cfg/GrailsDomainBinder.java | 30 ++++++++++------------ .../CollectionSecondPassBinderSpec.groovy | 4 ++- .../domainbinding/GrailsPropertyBinderSpec.groovy | 10 +++++--- .../domainbinding/ListSecondPassBinderSpec.groovy | 4 ++- .../domainbinding/MapSecondPassBinderSpec.groovy | 4 ++- 5 files changed, 29 insertions(+), 23 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 7db17c814e..89ac71987d 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 @@ -139,7 +139,6 @@ public class GrailsDomainBinder private CompositeIdBinder compositeIdBinder; private IdentityBinder identityBinder; private VersionBinder versionBinder; - private DefaultColumnNameFetcher defaultColumnNameFetcher; private ColumnNameForPropertyAndPathFetcher columnNameForPropertyAndPathFetcher; @@ -187,18 +186,17 @@ public class GrailsDomainBinder @Override public void contribute(AdditionalMappingContributions contributions, InFlightMetadataCollector metadataCollector, ResourceStreamLocator resourceStreamLocator, MetadataBuildingContext buildingContext) { - RootMappingDefaults rootMappingDefaults = null; this.metadataBuildingContext = new MetadataBuildingContextRootImpl( "default", metadataCollector.getBootstrapContext(), metadataCollector.getMetadataBuildingOptions(), metadataCollector - , rootMappingDefaults + , null ); BackticksRemover backticksRemover = new BackticksRemover(); PersistentEntityNamingStrategy namingStrategy = getNamingStrategy(); JdbcEnvironment jdbcEnvironment = getJdbcEnvironment(); - this.defaultColumnNameFetcher = new DefaultColumnNameFetcher(namingStrategy, backticksRemover); + DefaultColumnNameFetcher defaultColumnNameFetcher = new DefaultColumnNameFetcher(namingStrategy, backticksRemover); this.columnNameForPropertyAndPathFetcher = new ColumnNameForPropertyAndPathFetcher(namingStrategy, defaultColumnNameFetcher, backticksRemover); SimpleValueBinder simpleValueBinder = new SimpleValueBinder(namingStrategy, jdbcEnvironment); EnumTypeBinder enumTypeBinderToUse = enumTypeBinder != null ? enumTypeBinder : new EnumTypeBinder(); @@ -263,7 +261,7 @@ public class GrailsDomainBinder .getHibernatePersistentEntities(dataSourceName) .stream() .filter(persistentEntity -> persistentEntity.forGrailsDomainMapping(dataSourceName)) - .forEach(hibernatePersistentEntity -> bindRoot(hibernatePersistentEntity, metadataCollector, sessionFactoryName)); + .forEach(hibernatePersistentEntity -> bindRoot(hibernatePersistentEntity, metadataCollector, sessionFactoryName, defaultColumnNameFetcher)); } @@ -294,7 +292,7 @@ public class GrailsDomainBinder * @param mappings The Hibernate Mappings object * @param sessionFactoryBeanName the session factory bean name */ - protected void bindRoot(@Nonnull GrailsHibernatePersistentEntity entity,@Nonnull InFlightMetadataCollector mappings, String sessionFactoryBeanName) { + protected void bindRoot(@Nonnull GrailsHibernatePersistentEntity entity,@Nonnull InFlightMetadataCollector mappings, String sessionFactoryBeanName, DefaultColumnNameFetcher defaultColumnNameFetcher) { if (mappings.getEntityBinding(entity.getName()) != null) { LOG.info("[GrailsDomainBinder] Class [" + entity.getName() + "] is already mapped, skipping.. "); return; @@ -311,10 +309,10 @@ public class GrailsDomainBinder bindDiscriminatorProperty(root.getTable(), root, m); } // bind the sub classes - children.forEach(sub -> bindSubClass(sub, root, mappings, sessionFactoryBeanName, finalMapping,mappingCacheHolder )); + children.forEach(sub -> bindSubClass(sub, root, mappings, sessionFactoryBeanName, finalMapping,mappingCacheHolder, defaultColumnNameFetcher )); } - addMultiTenantFilterIfNecessary(entity, root, mappings); + addMultiTenantFilterIfNecessary(entity, root, mappings, defaultColumnNameFetcher); mappings.addEntityBinding(root); } @@ -337,7 +335,7 @@ public class GrailsDomainBinder */ private void addMultiTenantFilterIfNecessary( @Nonnull GrailsHibernatePersistentEntity entity, PersistentClass persistentClass, - @Nonnull InFlightMetadataCollector mappings) { + @Nonnull InFlightMetadataCollector mappings, DefaultColumnNameFetcher defaultColumnNameFetcher) { if (entity.isMultiTenant()) { TenantId tenantId = entity.getTenantId(); @@ -382,24 +380,24 @@ public class GrailsDomainBinder PersistentClass parent, @Nonnull InFlightMetadataCollector mappings, String sessionFactoryBeanName - , Mapping m, MappingCacheHolder mappingCacheHolder) { + , Mapping m, MappingCacheHolder mappingCacheHolder, DefaultColumnNameFetcher defaultColumnNameFetcher) { mappingCacheHolder.cacheMapping(sub); - Subclass subClass = createSubclassMapping(sub, parent, mappings, sessionFactoryBeanName, m); + Subclass subClass = createSubclassMapping(sub, parent, mappings, sessionFactoryBeanName, m, defaultColumnNameFetcher); parent.addSubclass(subClass); mappings.addEntityBinding(subClass); - addMultiTenantFilterIfNecessary(sub, subClass, mappings); + addMultiTenantFilterIfNecessary(sub, subClass, mappings, defaultColumnNameFetcher); var children = sub.getChildEntities(dataSourceName); if (!children.isEmpty()) { // bind the sub classes - children.forEach(sub1 -> bindSubClass(sub1, subClass, mappings, sessionFactoryBeanName, m,mappingCacheHolder )); + children.forEach(sub1 -> bindSubClass(sub1, subClass, mappings, sessionFactoryBeanName, m,mappingCacheHolder, defaultColumnNameFetcher )); } } - private @NonNull Subclass createSubclassMapping(@NonNull GrailsHibernatePersistentEntity subEntity, PersistentClass parent, @NonNull InFlightMetadataCollector mappings, String sessionFactoryBeanName, Mapping m) { + private @NonNull Subclass createSubclassMapping(@NonNull GrailsHibernatePersistentEntity subEntity, PersistentClass parent, @NonNull InFlightMetadataCollector mappings, String sessionFactoryBeanName, Mapping m, DefaultColumnNameFetcher defaultColumnNameFetcher) { Subclass subClass; subEntity.configureDerivedProperties(); if (!m.getTablePerHierarchy() && !m.isTablePerConcreteClass()) { @@ -413,7 +411,7 @@ public class GrailsDomainBinder else { subClass = new SingleTableSubclass(parent, this.metadataBuildingContext); subClass.setDiscriminatorValue(subEntity.getDiscriminatorValue()); - bindSubClass(subEntity, subClass, mappings, sessionFactoryBeanName); + bindSubClass(subEntity, subClass, mappings, sessionFactoryBeanName, defaultColumnNameFetcher); } subClass.setBatchSize(Optional.ofNullable(m.getBatchSize()).orElse(-1)); subClass.setDynamicUpdate(m.getDynamicUpdate()); @@ -512,7 +510,7 @@ public class GrailsDomainBinder * @param mappings The mappings instance */ private void bindSubClass(@Nonnull GrailsHibernatePersistentEntity sub, Subclass subClass, @Nonnull InFlightMetadataCollector mappings, - String sessionFactoryBeanName) { + String sessionFactoryBeanName, DefaultColumnNameFetcher defaultColumnNameFetcher) { classBinding.bindClass(sub, subClass, mappings); if (LOG.isDebugEnabled()) diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/CollectionSecondPassBinderSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/CollectionSecondPassBinderSpec.groovy index e1df39f439..6af22f62d1 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/CollectionSecondPassBinderSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/CollectionSecondPassBinderSpec.groovy @@ -4,6 +4,8 @@ import grails.gorm.annotation.Entity import grails.gorm.specs.HibernateGormDatastoreSpec import org.grails.orm.hibernate.cfg.GrailsHibernatePersistentEntity import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateToManyProperty +import org.grails.orm.hibernate.cfg.domainbinding.util.BackticksRemover +import org.grails.orm.hibernate.cfg.domainbinding.util.DefaultColumnNameFetcher import org.hibernate.mapping.RootClass @@ -40,7 +42,7 @@ class CollectionSecondPassBinderSpec extends HibernateGormDatastoreSpec { def bookEntity = getPersistentEntity(Book) as GrailsHibernatePersistentEntity // Register referenced entity in Hibernate - binder.bindRoot(bookEntity, collector, "sessionFactory") + binder.bindRoot(bookEntity, collector, "sessionFactory", new DefaultColumnNameFetcher(binder.getNamingStrategy(), new BackticksRemover())) // Manually create RootClass for the main entity def rootClass = new RootClass(binder.getMetadataBuildingContext()) 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 18357514fd..dba76ebbe5 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 @@ -18,7 +18,9 @@ import org.grails.orm.hibernate.cfg.domainbinding.binder.GrailsPropertyBinder import org.grails.orm.hibernate.cfg.domainbinding.binder.ManyToOneBinder import org.grails.orm.hibernate.cfg.domainbinding.binder.OneToOneBinder import org.grails.orm.hibernate.cfg.domainbinding.binder.SimpleValueBinder +import org.grails.orm.hibernate.cfg.domainbinding.util.BackticksRemover import org.grails.orm.hibernate.cfg.domainbinding.util.ColumnNameForPropertyAndPathFetcher +import org.grails.orm.hibernate.cfg.domainbinding.util.DefaultColumnNameFetcher import org.grails.orm.hibernate.cfg.domainbinding.util.PropertyFromValueCreator class GrailsPropertyBinderSpec extends HibernateGormDatastoreSpec { @@ -166,7 +168,7 @@ class GrailsPropertyBinderSpec extends HibernateGormDatastoreSpec { def authorEntity = createPersistentEntity(ListAuthor) // Register referenced entity in Hibernate - binder.bindRoot(bookEntity, collector, "sessionFactory") + binder.bindRoot(bookEntity, collector, "sessionFactory", new DefaultColumnNameFetcher(binder.getNamingStrategy(), new BackticksRemover())) // Manually create RootClass for the main entity to avoid duplicate property binding def rootClass = new RootClass(binder.getMetadataBuildingContext()) @@ -206,7 +208,7 @@ class GrailsPropertyBinderSpec extends HibernateGormDatastoreSpec { def authorEntity = createPersistentEntity(MapAuthor) // Register referenced entity in Hibernate - binder.bindRoot(bookEntity, collector, "sessionFactory") + binder.bindRoot(bookEntity, collector, "sessionFactory", new DefaultColumnNameFetcher(binder.getNamingStrategy(), new BackticksRemover())) // Manually create RootClass for the main entity def rootClass = new RootClass(binder.getMetadataBuildingContext()) @@ -243,7 +245,7 @@ class GrailsPropertyBinderSpec extends HibernateGormDatastoreSpec { def personEntity = getPersistentEntity(org.apache.grails.data.testing.tck.domains.PersonWithCompositeKey) as GrailsHibernatePersistentEntity when: - binder.bindRoot(personEntity, collector, "sessionFactory") + binder.bindRoot(personEntity, collector, "sessionFactory", new DefaultColumnNameFetcher(binder.getNamingStrategy(), new BackticksRemover())) def rootClass = collector.getEntityBinding(personEntity.name) then: @@ -266,7 +268,7 @@ class GrailsPropertyBinderSpec extends HibernateGormDatastoreSpec { def bookEntity = createPersistentEntity(BookForOneToOne) as GrailsHibernatePersistentEntity // Register referenced entity in Hibernate - binder.bindRoot(bookEntity, collector, "sessionFactory") + binder.bindRoot(bookEntity, collector, "sessionFactory", new DefaultColumnNameFetcher(binder.getNamingStrategy(), new BackticksRemover())) // Manually create RootClass for the main entity (AuthorWithOneToOne) def rootClass = new RootClass(binder.getMetadataBuildingContext()) diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ListSecondPassBinderSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ListSecondPassBinderSpec.groovy index f8ceee2d9b..66d07c71ba 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ListSecondPassBinderSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ListSecondPassBinderSpec.groovy @@ -4,6 +4,8 @@ import grails.gorm.annotation.Entity import grails.gorm.specs.HibernateGormDatastoreSpec import org.grails.orm.hibernate.cfg.GrailsHibernatePersistentEntity import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateToManyProperty +import org.grails.orm.hibernate.cfg.domainbinding.util.BackticksRemover +import org.grails.orm.hibernate.cfg.domainbinding.util.DefaultColumnNameFetcher import org.hibernate.mapping.RootClass import org.hibernate.mapping.SimpleValue @@ -43,7 +45,7 @@ class ListSecondPassBinderSpec extends HibernateGormDatastoreSpec { def bookEntity = getPersistentEntity(ListBinderBook) as GrailsHibernatePersistentEntity // Register referenced entity in Hibernate - binder.bindRoot(bookEntity, collector, "sessionFactory") + binder.bindRoot(bookEntity, collector, "sessionFactory", new DefaultColumnNameFetcher(binder.getNamingStrategy(), new BackticksRemover())) // Manually create RootClass for the main entity def rootClass = new RootClass(binder.getMetadataBuildingContext()) diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/MapSecondPassBinderSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/MapSecondPassBinderSpec.groovy index e4eccb37c9..7d58f13e90 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/MapSecondPassBinderSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/MapSecondPassBinderSpec.groovy @@ -4,6 +4,8 @@ import grails.gorm.annotation.Entity import grails.gorm.specs.HibernateGormDatastoreSpec import org.grails.orm.hibernate.cfg.GrailsHibernatePersistentEntity import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateToManyProperty +import org.grails.orm.hibernate.cfg.domainbinding.util.BackticksRemover +import org.grails.orm.hibernate.cfg.domainbinding.util.DefaultColumnNameFetcher import org.hibernate.mapping.RootClass import org.hibernate.mapping.SimpleValue @@ -43,7 +45,7 @@ class MapSecondPassBinderSpec extends HibernateGormDatastoreSpec { def bookEntity = getPersistentEntity(MapBookBinder) as GrailsHibernatePersistentEntity // Register referenced entity in Hibernate - binder.bindRoot(bookEntity, collector, "sessionFactory") + binder.bindRoot(bookEntity, collector, "sessionFactory", new DefaultColumnNameFetcher(binder.getNamingStrategy(), new BackticksRemover())) // Manually create RootClass for the main entity def rootClass = new RootClass(binder.getMetadataBuildingContext())
