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 7c715777063ec09430dc789114238e0d24afe38b Author: Walter Duque de Estrada <[email protected]> AuthorDate: Mon Feb 9 21:25:20 2026 -0600 ✦ I have updated NamespaceNameExtractorSpec.groovy to use the now static methods of NamespaceNameExtractor. I also identified and fixed a compilation error in GrailsHibernatePersistentEntity.java where a closing brace was missing and an incorrect method was being called for the catalog name. Summary of Changes: 1. `NamespaceNameExtractorSpec.groovy`: Updated all test cases to call NamespaceNameExtractor.getSchemaName(mappings) and NamespaceNameExtractor.getCatalogName(mappings) directly, removing the need for an instance of the extractor. --- .../orm/hibernate/cfg/GrailsDomainBinder.java | 84 ++++------------------ .../cfg/GrailsHibernatePersistentEntity.java | 26 ++++++- .../cfg/domainbinding/CollectionBinder.java | 4 +- .../cfg/domainbinding/CompositeIdBinder.java | 4 -- .../cfg/domainbinding/NamespaceNameExtractor.java | 9 ++- .../NamespaceNameExtractorSpec.groovy | 11 ++- 6 files changed, 47 insertions(+), 91 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 1443580bcb..cef01a3a9a 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 @@ -135,8 +135,6 @@ public class GrailsDomainBinder this.propertyFromValueCreator = new PropertyFromValueCreator(); this.mappingCacheHolder = MappingCacheHolder.getInstance(); this.collectionHolder = new CollectionHolder(this); - this.collectionBinder = new CollectionBinder(null, this, null); - this.componentPropertyBinder = new ComponentPropertyBinder(null, null, mappingCacheHolder, collectionHolder, enumTypeBinder, collectionBinder, propertyFromValueCreator); // pre-build mappings for (GrailsHibernatePersistentEntity persistentEntity : hibernateMappingContext.getHibernatePersistentEntities()) { mappingCacheHolder.cacheMapping(persistentEntity); @@ -160,21 +158,6 @@ public class GrailsDomainBinder } - /** - * The default mapping defined by {@link org.grails.datastore.mapping.config.Settings#SETTING_DEFAULT_MAPPING} - * @param defaultMapping The default mapping - */ - public void setDefaultMapping(Closure defaultMapping) { - this.defaultMapping = defaultMapping; - } - - /** - * - * @param namingStrategy Custom naming strategy to plugin into table naming - */ - public void setNamingStrategy(PersistentEntityNamingStrategy namingStrategy) { - this.namingStrategy = namingStrategy; - } @Override @@ -197,16 +180,6 @@ public class GrailsDomainBinder } - /** - * Override the default naming strategy for the default datasource given a Class or a full class name. - * @param strategy the class or name - * @throws ClassNotFoundException When the class was not found for specified strategy - * @throws InstantiationException When an error occurred instantiating the strategy - * @throws IllegalAccessException When an error occurred instantiating the strategy - */ - public static void configureNamingStrategy(final Object strategy) throws ClassNotFoundException, InstantiationException, IllegalAccessException { - configureNamingStrategy(ConnectionSource.DEFAULT, strategy); - } /** * Override the default naming strategy given a Class or a full class name, @@ -225,38 +198,6 @@ public class GrailsDomainBinder - /** - * First pass to bind collection to Hibernate metamodel, sets up second pass - * - * @param property The GrailsDomainClassProperty instance - * @param collection The collection - * @param owner The owning persistent class - * @param mappings The Hibernate mappings instance - * @param path - */ - public void bindCollection(HibernateToManyProperty property, Collection collection, - PersistentClass owner, @Nonnull InFlightMetadataCollector mappings, String path, String sessionFactoryBeanName) { - collectionBinder.bindCollection(property, collection, owner, mappings, path, sessionFactoryBeanName); - } - - /** - * Binds a Grails domain class to the Hibernate runtime meta model - * - * @param entity The domain class to bind - * @param mappings The existing mappings - * @param sessionFactoryBeanName the session factory bean name - * @throws MappingException Thrown if the domain class uses inheritance which is not supported - */ - public void bindClass(@Nonnull PersistentEntity entity, @Nonnull InFlightMetadataCollector mappings, String sessionFactoryBeanName) - throws MappingException { - //if (domainClass.getClazz().getSuperclass() == Object.class) { - if (entity.isRoot()) { - bindRoot((GrailsHibernatePersistentEntity) entity, mappings, sessionFactoryBeanName); - } - } - - - /** * Binds a root class (one with no super classes) to the runtime meta model @@ -449,8 +390,8 @@ public class GrailsDomainBinder InFlightMetadataCollector mappings, Mapping gormMapping, String sessionFactoryBeanName) { classBinding.bindClass(sub, joinedSubclass, mappings); - String schemaName = new NamespaceNameExtractor().getSchemaName(mappings); - String catalogName = new NamespaceNameExtractor().getCatalogName(mappings); + String schemaName = NamespaceNameExtractor.getSchemaName(mappings); + String catalogName = NamespaceNameExtractor.getCatalogName(mappings); Table mytable = mappings.addTable( schemaName, catalogName, @@ -481,8 +422,8 @@ public class GrailsDomainBinder String logicalTableName = GrailsHibernateUtil.unqualify(model.getEntityName()); String physicalTableName = new TableNameFetcher(getNamingStrategy()).getTableName(sub); - String schemaName = new NamespaceNameExtractor().getSchemaName(mappings); - String catalogName = new NamespaceNameExtractor().getCatalogName(mappings); + String schemaName = NamespaceNameExtractor.getSchemaName(mappings); + String catalogName = NamespaceNameExtractor.getCatalogName(mappings); mappings.addTableNameBinding(schemaName, catalogName, logicalTableName, physicalTableName, denormalizedSuperTable); return physicalTableName; @@ -565,7 +506,9 @@ public class GrailsDomainBinder */ private RootClass bindRootPersistentClassCommonValues(@Nonnull GrailsHibernatePersistentEntity domainClass, @Nonnull java.util.Collection<GrailsHibernatePersistentEntity> children, - @Nonnull InFlightMetadataCollector mappings, String sessionFactoryBeanName) { + @Nonnull InFlightMetadataCollector mappings, + String sessionFactoryBeanName + ) { RootClass root = new RootClass(this.metadataBuildingContext); root.setAbstract(domainClass.isAbstract()); @@ -590,16 +533,13 @@ public class GrailsDomainBinder root.setDynamicInsert(gormMapping.getDynamicInsert()); - var schema = ofNullable(gormMapping.getTable()) - .map(org.grails.orm.hibernate.cfg.Table::getSchema) - .orElse(new NamespaceNameExtractor().getSchemaName(mappings)); + var schema = domainClass.getSchema(mappings); - var catalog = ofNullable(gormMapping.getTable()) - .map(org.grails.orm.hibernate.cfg.Table::getCatalog) - .orElse(new NamespaceNameExtractor().getCatalogName(mappings)); + var catalog = domainClass.getCatalog(mappings); var isAbstract = !gormMapping.getTablePerHierarchy() && gormMapping.isTablePerConcreteClass() && root.isAbstract(); + // create the table var table = mappings.addTable(schema , catalog @@ -622,9 +562,9 @@ public class GrailsDomainBinder - public void bindIdentity( + private void bindIdentity( @Nonnull GrailsHibernatePersistentEntity domainClass, - RootClass root, + @Nonnull RootClass root, @Nonnull InFlightMetadataCollector mappings, Mapping gormMapping, String sessionFactoryBeanName) { 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 659f8a476a..b7ad2a50b7 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 @@ -3,6 +3,14 @@ package org.grails.orm.hibernate.cfg; import java.util.List; import java.util.Objects; import java.util.Optional; +import java.util.function.Function; + +import jakarta.annotation.Nonnull; + +import org.hibernate.boot.model.naming.Identifier; +import org.hibernate.boot.model.relational.Database; +import org.hibernate.boot.model.relational.Namespace; +import org.hibernate.boot.spi.InFlightMetadataCollector; import org.grails.datastore.mapping.model.PersistentEntity; import org.grails.datastore.mapping.model.PersistentProperty; @@ -10,6 +18,7 @@ import org.grails.datastore.mapping.model.config.GormProperties; import org.grails.datastore.mapping.model.types.TenantId; import org.grails.orm.hibernate.cfg.domainbinding.ConfigureDerivedPropertiesConsumer; import org.grails.orm.hibernate.cfg.domainbinding.DefaultColumnNameFetcher; +import org.grails.orm.hibernate.cfg.domainbinding.NamespaceNameExtractor; /** * Common interface for Hibernate persistent entities @@ -88,5 +97,20 @@ public interface GrailsHibernatePersistentEntity extends PersistentEntity { .map(defaultColumnName -> ":tenantId = " + defaultColumnName) .orElse(null); } + default String getSchema(@Nonnull InFlightMetadataCollector mappings) { + return Optional.ofNullable(getMappedForm()) + .map(Mapping::getTable) + .map(org.grails.orm.hibernate.cfg.Table::getSchema) + .orElse(NamespaceNameExtractor.getSchemaName(mappings)); + + } + + default String getCatalog(@Nonnull InFlightMetadataCollector mappings) { + return Optional.ofNullable(getMappedForm()) + .map(Mapping::getTable) + .map(org.grails.orm.hibernate.cfg.Table::getCatalog) + .orElse(NamespaceNameExtractor.getCatalogName(mappings)); + + } +} -} \ No newline at end of file diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/CollectionBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/CollectionBinder.java index 2a9b4ed21a..942cc146be 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/CollectionBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/CollectionBinder.java @@ -141,8 +141,8 @@ public class CollectionBinder { String s = new TableForManyCalculator(namingStrategy).calculateTableForMany(property); String tableName = (jt != null && jt.getName() != null ? jt.getName() : namingStrategy.resolveTableName(s)); - String schemaName = new NamespaceNameExtractor().getSchemaName(mappings); - String catalogName = new NamespaceNameExtractor().getCatalogName(mappings); + String schemaName = NamespaceNameExtractor.getSchemaName(mappings); + String catalogName = NamespaceNameExtractor.getCatalogName(mappings); if(jt != null) { if(jt.getSchema() != null) { schemaName = jt.getSchema(); diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/CompositeIdBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/CompositeIdBinder.java index 7fbbf0fdae..2ec2685203 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/CompositeIdBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/CompositeIdBinder.java @@ -24,10 +24,6 @@ public class CompositeIdBinder { this.componentPropertyBinder = componentPropertyBinder; } - protected CompositeIdBinder() { - this.metadataBuildingContext = null; - this.componentPropertyBinder = null; - } public void bindCompositeId(@Nonnull PersistentEntity domainClass, RootClass root, CompositeIdentity compositeIdentity, @Nonnull InFlightMetadataCollector mappings, String sessionFactoryBeanName) { diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/NamespaceNameExtractor.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/NamespaceNameExtractor.java index 68137f5a25..9da91e07d0 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/NamespaceNameExtractor.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/NamespaceNameExtractor.java @@ -13,18 +13,18 @@ import java.util.function.Function; public class NamespaceNameExtractor { - public String getCatalogName(@Nonnull InFlightMetadataCollector mappings) { + public static String getCatalogName(@Nonnull InFlightMetadataCollector mappings) { return getNamespaceName(mappings, Namespace.Name::getCatalog); } - public String getSchemaName(@Nonnull InFlightMetadataCollector mappings) { + public static String getSchemaName(@Nonnull InFlightMetadataCollector mappings) { return getNamespaceName(mappings, Namespace.Name::getSchema); } - public String getNamespaceName( + private static String getNamespaceName( @Nonnull InFlightMetadataCollector mappings, Function<Namespace.Name, Identifier> function ) { return Optional.ofNullable(mappings.getDatabase()) @@ -32,7 +32,6 @@ public class NamespaceNameExtractor { .map(Namespace::getName) .map(function) .map(Identifier::getCanonicalName) - .orElse(null) - ; + .orElse(null); } } diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/NamespaceNameExtractorSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/NamespaceNameExtractorSpec.groovy index 69e006f6f3..10abae5e29 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/NamespaceNameExtractorSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/NamespaceNameExtractorSpec.groovy @@ -16,9 +16,6 @@ import spock.lang.Unroll */ class NamespaceNameExtractorSpec extends Specification { - @Subject - NamespaceNameExtractor extractor = new NamespaceNameExtractor() - // --- Tests for getSchemaName --- def "should return the schema name when the full object graph exists"() { @@ -37,7 +34,7 @@ class NamespaceNameExtractorSpec extends Specification { mockSchemaIdentifier.getCanonicalName() >> expectedSchema when: "the schema name is extracted" - def result = extractor.getSchemaName(mockMappings) + def result = NamespaceNameExtractor.getSchemaName(mockMappings) then: "the correct schema name is returned" result == expectedSchema @@ -74,7 +71,7 @@ class NamespaceNameExtractorSpec extends Specification { } when: "the schema name is extracted" - def result = extractor.getSchemaName(mockMappings) + def result = NamespaceNameExtractor.getSchemaName(mockMappings) then: "the result is null" result == null @@ -105,7 +102,7 @@ class NamespaceNameExtractorSpec extends Specification { mockCatalogIdentifier.getCanonicalName() >> expectedCatalog when: "the catalog name is extracted" - def result = extractor.getCatalogName(mockMappings) + def result = NamespaceNameExtractor.getCatalogName(mockMappings) then: "the correct catalog name is returned" result == expectedCatalog @@ -140,7 +137,7 @@ class NamespaceNameExtractorSpec extends Specification { } when: "the catalog name is extracted" - def result = extractor.getCatalogName(mockMappings) + def result = NamespaceNameExtractor.getCatalogName(mockMappings) then: "the result is null" result == null
