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 8c8ff2a3bfdc0d09044a22c6044b489de91d7532 Author: Walter Duque de Estrada <[email protected]> AuthorDate: Sat Feb 7 19:36:29 2026 -0600 A little bit of cleanup --- .../cfg/GrailsHibernatePersistentEntity.java | 9 +++++++++ .../cfg/domainbinding/CollectionBinder.java | 9 +++++---- .../secondpass/CollectionSecondPassBinder.java | 20 +++----------------- .../secondpass/ListSecondPassBinder.java | 8 ++++++-- .../domainbinding/ListSecondPassBinderSpec.groovy | 3 ++- 5 files changed, 25 insertions(+), 24 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 8c0f985476..659f8a476a 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 @@ -7,7 +7,9 @@ import java.util.Optional; 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.TenantId; import org.grails.orm.hibernate.cfg.domainbinding.ConfigureDerivedPropertiesConsumer; +import org.grails.orm.hibernate.cfg.domainbinding.DefaultColumnNameFetcher; /** * Common interface for Hibernate persistent entities @@ -80,4 +82,11 @@ public interface GrailsHibernatePersistentEntity extends PersistentEntity { getPersistentProperties().forEach(new ConfigureDerivedPropertiesConsumer( getMappedForm())); } + default String getMultiTenantFilterCondition(DefaultColumnNameFetcher fetcher) { + return Optional.ofNullable(getTenantId()) + .map(fetcher::getDefaultColumnName) + .map(defaultColumnName -> ":tenantId = " + defaultColumnName) + .orElse(null); + } + } \ 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 4d25a77699..1b2db21cc2 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 @@ -27,8 +27,6 @@ import org.hibernate.mapping.Table; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.Map; - /** * Handles the binding of collections to the Hibernate runtime meta model. */ @@ -42,14 +40,17 @@ public class CollectionBinder { private final ListSecondPassBinder listSecondPassBinder; private final CollectionSecondPassBinder collectionSecondPassBinder; private final MapSecondPassBinder mapSecondPassBinder; + private final DefaultColumnNameFetcher defaultColumnNameFetcher; public CollectionBinder(MetadataBuildingContext metadataBuildingContext, GrailsDomainBinder grailsDomainBinder, PersistentEntityNamingStrategy namingStrategy) { this.metadataBuildingContext = metadataBuildingContext; this.grailsDomainBinder = grailsDomainBinder; this.namingStrategy = namingStrategy; this.collectionSecondPassBinder = new CollectionSecondPassBinder(metadataBuildingContext, namingStrategy); - this.listSecondPassBinder = new ListSecondPassBinder(metadataBuildingContext, collectionSecondPassBinder); + this.listSecondPassBinder = new ListSecondPassBinder(metadataBuildingContext, namingStrategy,collectionSecondPassBinder); this.mapSecondPassBinder = new MapSecondPassBinder(metadataBuildingContext, namingStrategy, collectionSecondPassBinder); + this.defaultColumnNameFetcher = new DefaultColumnNameFetcher(namingStrategy); + } /** @@ -161,7 +162,7 @@ public class CollectionBinder { public String getMultiTenantFilterCondition(GrailsHibernatePersistentEntity referenced) { - return collectionSecondPassBinder.getMultiTenantFilterCondition(referenced); + return referenced.getMultiTenantFilterCondition(defaultColumnNameFetcher); } diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/CollectionSecondPassBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/CollectionSecondPassBinder.java index 2d493c6e69..383f1a07bb 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/CollectionSecondPassBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/CollectionSecondPassBinder.java @@ -8,7 +8,6 @@ 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.*; import org.grails.orm.hibernate.cfg.domainbinding.BackticksRemover; import org.grails.orm.hibernate.cfg.domainbinding.CollectionForPropertyConfigBinder; @@ -47,15 +46,14 @@ public class CollectionSecondPassBinder { private final MetadataBuildingContext metadataBuildingContext; private final PersistentEntityNamingStrategy namingStrategy; + private final DefaultColumnNameFetcher defaultColumnNameFetcher; public CollectionSecondPassBinder(MetadataBuildingContext metadataBuildingContext, PersistentEntityNamingStrategy namingStrategy) { this.metadataBuildingContext = metadataBuildingContext; this.namingStrategy = namingStrategy; + this.defaultColumnNameFetcher = new DefaultColumnNameFetcher(namingStrategy); } - public PersistentEntityNamingStrategy getNamingStrategy() { - return namingStrategy; - } public void bindCollectionSecondPass(HibernateToManyProperty property, @Nonnull InFlightMetadataCollector mappings, java.util.Map<?, ?> persistentClasses, Collection collection, String sessionFactoryBeanName) { @@ -138,7 +136,7 @@ public class CollectionSecondPassBinder { final boolean isManyToMany = property instanceof ManyToMany; if(referenced != null && !isManyToMany && referenced.isMultiTenant()) { - String filterCondition = getMultiTenantFilterCondition(referenced); + String filterCondition = referenced.getMultiTenantFilterCondition(defaultColumnNameFetcher); if(filterCondition != null) { if (property.isUnidirectionalOneToMany()) { collection.addManyToManyFilter(GormProperties.TENANT_IDENTITY, filterCondition, true, Collections.emptyMap(), Collections.emptyMap()); @@ -577,16 +575,4 @@ public class CollectionSecondPassBinder { return false; } - public String getMultiTenantFilterCondition(GrailsHibernatePersistentEntity referenced) { - TenantId tenantId = referenced.getTenantId(); - if(tenantId != null) { - - String defaultColumnName = new DefaultColumnNameFetcher(namingStrategy).getDefaultColumnName(tenantId); - return ":tenantId = " + defaultColumnName; - } - else { - return null; - } - } - } diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/ListSecondPassBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/ListSecondPassBinder.java index 171e2f94fe..9bfe9b9c95 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/ListSecondPassBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/ListSecondPassBinder.java @@ -5,6 +5,7 @@ import org.grails.datastore.mapping.model.PersistentEntity; import org.grails.datastore.mapping.model.types.ManyToMany; import org.grails.orm.hibernate.cfg.GrailsHibernatePersistentProperty; import org.grails.orm.hibernate.cfg.HibernateToManyProperty; +import org.grails.orm.hibernate.cfg.PersistentEntityNamingStrategy; import org.grails.orm.hibernate.cfg.domainbinding.BackticksRemover; import org.grails.orm.hibernate.cfg.domainbinding.SimpleValueColumnBinder; @@ -33,17 +34,20 @@ public class ListSecondPassBinder { private final MetadataBuildingContext metadataBuildingContext; private final CollectionSecondPassBinder collectionSecondPassBinder; + private final PersistentEntityNamingStrategy namingStrategy; - public ListSecondPassBinder(MetadataBuildingContext metadataBuildingContext, CollectionSecondPassBinder collectionSecondPassBinder) { + public ListSecondPassBinder(MetadataBuildingContext metadataBuildingContext + , PersistentEntityNamingStrategy namingStrategy, CollectionSecondPassBinder collectionSecondPassBinder) { this.metadataBuildingContext = metadataBuildingContext; this.collectionSecondPassBinder = collectionSecondPassBinder; + this.namingStrategy = namingStrategy; } public void bindListSecondPass(HibernateToManyProperty property, @Nonnull InFlightMetadataCollector mappings, Map<?, ?> persistentClasses, org.hibernate.mapping.List list, String sessionFactoryBeanName) { collectionSecondPassBinder.bindCollectionSecondPass(property, mappings, persistentClasses, list, sessionFactoryBeanName); - String columnName = property.getIndexColumnName(collectionSecondPassBinder.getNamingStrategy()); + String columnName = property.getIndexColumnName(namingStrategy); final boolean isManyToMany = property instanceof ManyToMany; if (isManyToMany && !property.isOwningSide()) { 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 9f7ac201df..1db469a48f 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 @@ -26,7 +26,8 @@ class ListSecondPassBinderSpec extends HibernateGormDatastoreSpec { def binder = getGrailsDomainBinder() def collectionBinder = binder.getCollectionBinder() def collectionSecondPassBinder = new CollectionSecondPassBinder(binder.getMetadataBuildingContext(), binder.getNamingStrategy()) - def listSecondPassBinder = new ListSecondPassBinder(binder.getMetadataBuildingContext(), collectionSecondPassBinder) + def namingStrategy = binder.getNamingStrategy() + def listSecondPassBinder = new ListSecondPassBinder(binder.getMetadataBuildingContext(),namingStrategy, collectionSecondPassBinder) def authorEntity = getPersistentEntity(ListBinderAuthor) as GrailsHibernatePersistentEntity def bookEntity = getPersistentEntity(ListBinderBook) as GrailsHibernatePersistentEntity
