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 3e0c3b8195ef6543559cce4da1feb8786b417643 Author: Walter Duque de Estrada <[email protected]> AuthorDate: Sun Feb 15 19:12:19 2026 -0600 removal of unused parameters --- .../orm/hibernate/cfg/GrailsDomainBinder.java | 57 +++++++++------------ .../binder/ClassPropertiesBinder.java | 10 ++-- .../cfg/domainbinding/binder/CollectionBinder.java | 8 +-- .../cfg/domainbinding/binder/ComponentBinder.java | 7 +-- .../binder/ComponentPropertyBinder.java | 11 ++-- .../domainbinding/binder/CompositeIdBinder.java | 4 +- .../domainbinding/binder/GrailsPropertyBinder.java | 8 ++- .../cfg/domainbinding/binder/IdentityBinder.java | 8 +-- .../secondpass/CollectionSecondPassBinder.java | 11 ++-- .../domainbinding/secondpass/ListSecondPass.java | 6 +-- .../secondpass/ListSecondPassBinder.java | 5 +- .../domainbinding/secondpass/MapSecondPass.java | 6 +-- .../secondpass/MapSecondPassBinder.java | 4 +- .../domainbinding/secondpass/SetSecondPass.java | 7 +-- .../cfg/domainbinding/CollectionBinderSpec.groovy | 39 +++++++++++++-- .../CollectionSecondPassBinderSpec.groovy | 42 +++++++++++++--- .../cfg/domainbinding/ComponentBinderSpec.groovy | 5 +- .../ComponentPropertyBinderSpec.groovy | 14 ++---- .../cfg/domainbinding/CompositeIdBinderSpec.groovy | 10 ++-- .../domainbinding/GrailsPropertyBinderSpec.groovy | 58 ++++++++++++++++------ .../cfg/domainbinding/IdentityBinderSpec.groovy | 16 +++--- .../domainbinding/ListSecondPassBinderSpec.groovy | 44 +++++++++++++--- .../domainbinding/MapSecondPassBinderSpec.groovy | 44 +++++++++++++--- .../binder/ClassPropertiesBinderSpec.groovy | 6 +-- .../collectionType/BagCollectionTypeSpec.groovy | 2 +- .../collectionType/CollectionHolderSpec.groovy | 2 +- .../collectionType/ListCollectionTypeSpec.groovy | 2 +- .../collectionType/MapCollectionTypeSpec.groovy | 2 +- .../collectionType/SetCollectionTypeSpec.groovy | 2 +- .../SortedSetCollectionTypeSpec.groovy | 2 +- 30 files changed, 273 insertions(+), 169 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 d64e6b569a..eaaaa6305b 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 @@ -14,20 +14,12 @@ */ package org.grails.orm.hibernate.cfg; -import groovy.lang.Closure; - -import org.grails.datastore.mapping.model.config.GormProperties; -import org.grails.datastore.mapping.model.types.TenantId; import org.grails.orm.hibernate.cfg.domainbinding.binder.ClassPropertiesBinder; import org.grails.orm.hibernate.cfg.domainbinding.binder.ClassBinder; import org.grails.orm.hibernate.cfg.domainbinding.binder.ColumnConfigToColumnBinder; import org.grails.orm.hibernate.cfg.domainbinding.binder.ComponentPropertyBinder; import org.grails.orm.hibernate.cfg.domainbinding.binder.CompositeIdBinder; import org.grails.orm.hibernate.cfg.domainbinding.binder.EnumTypeBinder; -import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateManyToManyProperty; -import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateManyToOneProperty; -import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateOneToManyProperty; -import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateOneToOneProperty; import org.grails.orm.hibernate.cfg.domainbinding.util.NamingStrategyProvider; import org.grails.orm.hibernate.cfg.domainbinding.util.BasicValueIdCreator; import org.grails.orm.hibernate.cfg.domainbinding.binder.GrailsPropertyBinder; @@ -51,17 +43,14 @@ import org.grails.orm.hibernate.cfg.domainbinding.util.ColumnNameForPropertyAndP import org.grails.orm.hibernate.cfg.domainbinding.util.DefaultColumnNameFetcher; import org.grails.orm.hibernate.cfg.domainbinding.util.MultiTenantFilterBinder; import org.grails.orm.hibernate.cfg.domainbinding.util.BackticksRemover; -import org.grails.orm.hibernate.cfg.domainbinding.util.ForeignKeyColumnCountCalculator; import org.grails.orm.hibernate.cfg.domainbinding.util.NamingStrategyWrapper; import org.grails.orm.hibernate.cfg.domainbinding.util.PropertyFromValueCreator; import org.grails.orm.hibernate.cfg.domainbinding.util.SimpleValueColumnFetcher; import org.grails.orm.hibernate.cfg.domainbinding.util.TableNameFetcher; import org.checkerframework.checker.nullness.qual.NonNull; -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.spi.AdditionalMappingContributions; @@ -69,27 +58,22 @@ 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.BasicValue; import org.hibernate.mapping.Column; -import org.hibernate.mapping.Component; -import org.hibernate.mapping.DependantValue; import org.hibernate.mapping.Formula; import org.hibernate.mapping.JoinedSubclass; import org.hibernate.mapping.PersistentClass; -import org.hibernate.mapping.Property; import org.hibernate.mapping.RootClass; 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.metamodel.mapping.JdbcMapping; import org.hibernate.service.ServiceRegistry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.Collections; +import java.util.Collection; import java.util.Optional; import jakarta.annotation.Nonnull; @@ -279,14 +263,14 @@ public class GrailsDomainBinder return; } var children = entity.getChildEntities(dataSourceName); - RootClass root = bindRootPersistentClassCommonValues(entity, children, mappings, sessionFactoryBeanName, identityBinder, versionBinder, classBinder, classPropertiesBinder); + RootClass root = bindRootPersistentClassCommonValues(entity, children, mappings, identityBinder, versionBinder, classBinder, classPropertiesBinder); Mapping m = entity.getMappedForm(); final Mapping finalMapping = m; if (!children.isEmpty() && entity.isTablePerHierarchy()) { bindDiscriminatorProperty(root, m); } // bind the sub classes - children.forEach(sub -> bindSubClass(sub, root, mappings, sessionFactoryBeanName, finalMapping,mappingCacheHolder, defaultColumnNameFetcher, classBinder, classPropertiesBinder, multiTenantFilterBinder, joinedSubClassBinder, unionSubclassBinder, singleTableSubclassBinder)); + children.forEach(sub -> bindSubClass(sub, root, mappings, finalMapping,mappingCacheHolder, defaultColumnNameFetcher, classBinder, classPropertiesBinder, multiTenantFilterBinder, joinedSubClassBinder, unionSubclassBinder, singleTableSubclassBinder)); multiTenantFilterBinder.addMultiTenantFilterIfNecessary(entity, root, mappings, defaultColumnNameFetcher); @@ -305,19 +289,17 @@ public class GrailsDomainBinder /** * Binds a sub class. * - * @param sub The sub domain class instance - * @param parent The parent persistent class instance - * @param mappings The mappings instance - * @param sessionFactoryBeanName the session factory bean name + * @param sub The sub domain class instance + * @param parent The parent persistent class instance + * @param mappings The mappings instance * @param mappingCacheHolder */ private void bindSubClass(@Nonnull GrailsHibernatePersistentEntity sub, PersistentClass parent, @Nonnull InFlightMetadataCollector mappings, - String sessionFactoryBeanName - , Mapping m, MappingCacheHolder mappingCacheHolder, DefaultColumnNameFetcher defaultColumnNameFetcher, ClassBinder classBinder, ClassPropertiesBinder classPropertiesBinder, MultiTenantFilterBinder multiTenantFilterBinder, JoinedSubClassBinder joinedSubClassBinder, UnionSubclassBinder unionSubclassBinder, SingleTableSubclassBinder singleTableSubclassBinder) { + Mapping m, MappingCacheHolder mappingCacheHolder, DefaultColumnNameFetcher defaultColumnNameFetcher, ClassBinder classBinder, ClassPropertiesBinder classPropertiesBinder, MultiTenantFilterBinder multiTenantFilterBinder, JoinedSubClassBinder joinedSubClassBinder, UnionSubclassBinder unionSubclassBinder, SingleTableSubclassBinder singleTableSubclassBinder) { mappingCacheHolder.cacheMapping(sub); - Subclass subClass = createSubclassMapping(sub, parent, mappings, sessionFactoryBeanName, m, defaultColumnNameFetcher, classBinder, classPropertiesBinder, multiTenantFilterBinder, joinedSubClassBinder, unionSubclassBinder, singleTableSubclassBinder); + Subclass subClass = createSubclassMapping(sub, parent, mappings, m, defaultColumnNameFetcher, classPropertiesBinder, joinedSubClassBinder, unionSubclassBinder, singleTableSubclassBinder); parent.addSubclass(subClass); @@ -328,11 +310,19 @@ public class GrailsDomainBinder var children = sub.getChildEntities(dataSourceName); if (!children.isEmpty()) { // bind the sub classes - children.forEach(sub1 -> bindSubClass(sub1, subClass, mappings, sessionFactoryBeanName, m,mappingCacheHolder, defaultColumnNameFetcher, classBinder, classPropertiesBinder, multiTenantFilterBinder, joinedSubClassBinder, unionSubclassBinder, singleTableSubclassBinder )); + children.forEach(sub1 -> bindSubClass(sub1, subClass, mappings, m,mappingCacheHolder, defaultColumnNameFetcher, classBinder, classPropertiesBinder, multiTenantFilterBinder, joinedSubClassBinder, unionSubclassBinder, singleTableSubclassBinder )); } } - private @NonNull Subclass createSubclassMapping(@NonNull GrailsHibernatePersistentEntity subEntity, PersistentClass parent, @NonNull InFlightMetadataCollector mappings, String sessionFactoryBeanName, Mapping m, DefaultColumnNameFetcher defaultColumnNameFetcher, ClassBinder classBinder, ClassPropertiesBinder classPropertiesBinder, MultiTenantFilterBinder multiTenantFilterBinder, JoinedSubClassBinder joinedSubClassBinder, UnionSubclassBinder unionSubclassBinder, SingleTableSubclassBind [...] + private @NonNull Subclass createSubclassMapping(@NonNull GrailsHibernatePersistentEntity subEntity + , PersistentClass parent + , @NonNull InFlightMetadataCollector mappings + , Mapping m + , DefaultColumnNameFetcher defaultColumnNameFetcher + ,ClassPropertiesBinder classPropertiesBinder + ,JoinedSubClassBinder joinedSubClassBinder + , UnionSubclassBinder unionSubclassBinder + , SingleTableSubclassBinder singleTableSubclassBinder) { Subclass subClass; subEntity.configureDerivedProperties(); if (!m.getTablePerHierarchy() && !m.isTablePerConcreteClass()) { @@ -358,7 +348,7 @@ public class GrailsDomainBinder subClass.setAbstract(subEntity.isAbstract()); subClass.setEntityName(subEntity.getName()); subClass.setJpaEntityName(GrailsHibernateUtil.unqualify(subEntity.getName())); - classPropertiesBinder.bindClassProperties(subEntity, subClass, mappings, sessionFactoryBeanName); + classPropertiesBinder.bindClassProperties(subEntity, subClass, mappings); return subClass; } @@ -425,10 +415,9 @@ public class GrailsDomainBinder * Binds a persistent classes to the table representation and binds the class properties */ private RootClass bindRootPersistentClassCommonValues(@Nonnull GrailsHibernatePersistentEntity domainClass, - @Nonnull java.util.Collection<GrailsHibernatePersistentEntity> children, + @Nonnull Collection<GrailsHibernatePersistentEntity> children, @Nonnull InFlightMetadataCollector mappings, - String sessionFactoryBeanName, - IdentityBinder identityBinder, + IdentityBinder identityBinder, VersionBinder versionBinder, ClassBinder classBinder, ClassPropertiesBinder classPropertiesBinder @@ -474,10 +463,10 @@ public class GrailsDomainBinder LOG.debug("[GrailsDomainBinder] Mapping Grails domain class: " + domainClass.getName() + " -> " + root.getTable().getName()); } - identityBinder.bindIdentity(domainClass, root, mappings, gormMapping, sessionFactoryBeanName); + identityBinder.bindIdentity(domainClass, root, mappings, gormMapping); versionBinder.bindVersion(domainClass.getVersion(), root); root.createPrimaryKey(); - classPropertiesBinder.bindClassProperties(domainClass, root, mappings, sessionFactoryBeanName); + classPropertiesBinder.bindClassProperties(domainClass, root, mappings); return root; } 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 f8f32804c4..c46f43f44d 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 @@ -36,18 +36,16 @@ public class ClassPropertiesBinder { /** * Binds the properties of the specified Grails domain class to the Hibernate meta-model. * - * @param domainClass The Grails domain class + * @param domainClass The Grails domain class * @param persistentClass The Hibernate PersistentClass instance - * @param mappings The Hibernate InFlightMetadataCollector instance - * @param sessionFactoryBeanName The session factory bean name + * @param mappings The Hibernate InFlightMetadataCollector instance */ public void bindClassProperties(@Nonnull GrailsHibernatePersistentEntity domainClass, PersistentClass persistentClass, - @Nonnull InFlightMetadataCollector mappings, - String sessionFactoryBeanName) { + @Nonnull InFlightMetadataCollector mappings) { for (GrailsHibernatePersistentProperty currentGrailsProp : domainClass.getPersistentPropertiesToBind()) { - Value value = grailsPropertyBinder.bindProperty(persistentClass, currentGrailsProp, mappings, sessionFactoryBeanName); + Value value = grailsPropertyBinder.bindProperty(persistentClass, currentGrailsProp, mappings); persistentClass.addProperty(propertyFromValueCreator.createProperty(value, currentGrailsProp)); } diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/CollectionBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/CollectionBinder.java index 88624ae4ed..9756629345 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/CollectionBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/CollectionBinder.java @@ -88,7 +88,7 @@ public class CollectionBinder { * @param path The property path */ public void bindCollection(HibernateToManyProperty property, Collection collection, - PersistentClass owner, @Nonnull InFlightMetadataCollector mappings, String path, String sessionFactoryBeanName) { + PersistentClass owner, @Nonnull InFlightMetadataCollector mappings, String path) { // set role String propertyName = getNameForPropertyAndPath(property, path); @@ -133,13 +133,13 @@ public class CollectionBinder { // set up second pass if (collection instanceof org.hibernate.mapping.List) { - mappings.addSecondPass(new ListSecondPass(listSecondPassBinder, property, mappings, collection, sessionFactoryBeanName)); + mappings.addSecondPass(new ListSecondPass(listSecondPassBinder, property, mappings, collection)); } else if (collection instanceof org.hibernate.mapping.Map) { - mappings.addSecondPass(new MapSecondPass(mapSecondPassBinder, property, mappings, collection, sessionFactoryBeanName)); + mappings.addSecondPass(new MapSecondPass(mapSecondPassBinder, property, mappings, collection)); } else { // Collection -> Bag - mappings.addSecondPass(new SetSecondPass(collectionSecondPassBinder, property, mappings, collection, sessionFactoryBeanName)); + mappings.addSecondPass(new SetSecondPass(collectionSecondPassBinder, property, mappings, collection)); } } 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 b507f5ac70..560ed648cd 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 @@ -1,13 +1,10 @@ package org.grails.orm.hibernate.cfg.domainbinding.binder; -import java.util.List; - import org.hibernate.boot.spi.InFlightMetadataCollector; import org.hibernate.mapping.Component; import org.hibernate.mapping.PersistentClass; import org.hibernate.mapping.Table; -import org.grails.datastore.mapping.model.PersistentProperty; import org.grails.datastore.mapping.model.config.GormProperties; import org.grails.orm.hibernate.cfg.GrailsHibernatePersistentEntity; import org.grails.orm.hibernate.cfg.GrailsHibernatePersistentProperty; @@ -33,7 +30,7 @@ public class ComponentBinder { } public void bindComponent(Component component, HibernateEmbeddedProperty property, - @Nonnull InFlightMetadataCollector mappings, String sessionFactoryBeanName) { + @Nonnull InFlightMetadataCollector mappings) { Class<?> type = property.getType(); String role = GrailsHibernateUtil.qualify(type.getName(), property.getName()); component.setRoleName(role); @@ -55,7 +52,7 @@ public class ComponentBinder { component.setParentProperty(currentGrailsProp.getName()); continue; } - componentPropertyBinder.bindComponentProperty(component, property, currentGrailsProp, persistentClass, path, table, mappings, sessionFactoryBeanName); + componentPropertyBinder.bindComponentProperty(component, property, currentGrailsProp, persistentClass, path, table, mappings); } } } diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ComponentPropertyBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ComponentPropertyBinder.java index 5a9fbde104..bb4e015575 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ComponentPropertyBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ComponentPropertyBinder.java @@ -119,15 +119,14 @@ public class ComponentPropertyBinder { PersistentClass persistentClass, String path, Table table, - @Nonnull InFlightMetadataCollector mappings, - String sessionFactoryBeanName) { + @Nonnull InFlightMetadataCollector mappings) { Value value; // see if it's a collection type CollectionType collectionType = collectionHolder.get(currentGrailsProp.getType()); if (collectionType != null) { // create collection Collection collection = collectionType.create((HibernateToManyProperty) currentGrailsProp, persistentClass); - collectionBinder.bindCollection((HibernateToManyProperty) currentGrailsProp, collection, persistentClass, mappings, path, sessionFactoryBeanName); + collectionBinder.bindCollection((HibernateToManyProperty) currentGrailsProp, collection, persistentClass, mappings, path); mappings.addCollectionBinding(collection); value = collection; } @@ -153,7 +152,7 @@ public class ComponentPropertyBinder { } else if (currentGrailsProp instanceof HibernateEmbeddedProperty embedded) { value = new Component(metadataBuildingContext, persistentClass); - componentBinder.bindComponent((Component) value, embedded, mappings, sessionFactoryBeanName); + componentBinder.bindComponent((Component) value, embedded, mappings); } else { if (LOG.isDebugEnabled()) @@ -182,7 +181,7 @@ public class ComponentPropertyBinder { } public void bindComponent(Component component, HibernateEmbeddedProperty property, - boolean isNullable, @Nonnull InFlightMetadataCollector mappings, String sessionFactoryBeanName) { - componentBinder.bindComponent(component, property, mappings, sessionFactoryBeanName); + boolean isNullable, @Nonnull InFlightMetadataCollector mappings) { + componentBinder.bindComponent(component, property, mappings); } } diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/CompositeIdBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/CompositeIdBinder.java index f030bf0847..048715a1ad 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/CompositeIdBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/CompositeIdBinder.java @@ -25,7 +25,7 @@ public class CompositeIdBinder { public void bindCompositeId(@Nonnull GrailsHibernatePersistentEntity domainClass, RootClass root, - CompositeIdentity compositeIdentity, @Nonnull InFlightMetadataCollector mappings, String sessionFactoryBeanName) { + CompositeIdentity compositeIdentity, @Nonnull InFlightMetadataCollector mappings) { Component id = new Component(metadataBuildingContext, root); id.setNullValue("undefined"); root.setIdentifier(id); @@ -61,7 +61,7 @@ public class CompositeIdBinder { "] is not a valid property!"); } - componentPropertyBinder.bindComponentProperty(id, identifierProp, property, root, "", root.getTable(), mappings, sessionFactoryBeanName); + componentPropertyBinder.bindComponentProperty(id, identifierProp, property, root, "", root.getTable(), mappings); } } } 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 0c407946db..82a678f698 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 @@ -2,7 +2,6 @@ package org.grails.orm.hibernate.cfg.domainbinding.binder; import jakarta.annotation.Nonnull; import org.grails.datastore.mapping.model.types.Association; -import org.grails.datastore.mapping.model.types.Embedded; import org.grails.orm.hibernate.cfg.GrailsHibernatePersistentProperty; import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateEmbeddedProperty; import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateToManyProperty; @@ -94,8 +93,7 @@ public class GrailsPropertyBinder { public Value bindProperty(PersistentClass persistentClass , @Nonnull GrailsHibernatePersistentProperty currentGrailsProp - , @Nonnull InFlightMetadataCollector mappings - , String sessionFactoryBeanName) { + , @Nonnull InFlightMetadataCollector mappings) { if (LOG.isDebugEnabled()) { LOG.debug("[GrailsPropertyBinder] Binding persistent property [" + currentGrailsProp.getName() + "]"); } @@ -121,7 +119,7 @@ public class GrailsPropertyBinder { } else { // Actual Collection Collection collection = collectionType.create((HibernateToManyProperty) currentGrailsProp, persistentClass); - collectionBinder.bindCollection((HibernateToManyProperty) currentGrailsProp, collection, persistentClass, mappings, EMPTY_PATH, sessionFactoryBeanName); + collectionBinder.bindCollection((HibernateToManyProperty) currentGrailsProp, collection, persistentClass, mappings, EMPTY_PATH); mappings.addCollectionBinding(collection); value = collection; } @@ -141,7 +139,7 @@ public class GrailsPropertyBinder { } else if (currentGrailsProp instanceof HibernateEmbeddedProperty embedded) { value = new Component(metadataBuildingContext, persistentClass); - componentPropertyBinder.bindComponent((Component)value, embedded, true, mappings, sessionFactoryBeanName); + componentPropertyBinder.bindComponent((Component)value, embedded, true, mappings); } // work out what type of relationship it is and bind value else { // Default BasicValue diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/IdentityBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/IdentityBinder.java index 2c3e081695..16ae1327f0 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/IdentityBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/IdentityBinder.java @@ -1,8 +1,6 @@ package org.grails.orm.hibernate.cfg.domainbinding.binder; import org.hibernate.boot.spi.InFlightMetadataCollector; -import org.hibernate.boot.spi.MetadataBuildingContext; -import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment; import org.hibernate.mapping.RootClass; import org.grails.orm.hibernate.cfg.CompositeIdentity; @@ -10,7 +8,6 @@ import org.grails.orm.hibernate.cfg.GrailsHibernatePersistentEntity; import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateIdentity; import org.grails.orm.hibernate.cfg.Identity; import org.grails.orm.hibernate.cfg.Mapping; -import org.grails.orm.hibernate.cfg.PersistentEntityNamingStrategy; import jakarta.annotation.Nonnull; @@ -29,12 +26,11 @@ public class IdentityBinder { @Nonnull GrailsHibernatePersistentEntity domainClass, RootClass root, @Nonnull InFlightMetadataCollector mappings, - Mapping gormMapping, - String sessionFactoryBeanName) { + Mapping gormMapping) { HibernateIdentity id = gormMapping != null ? gormMapping.getIdentity() : null; if (id instanceof CompositeIdentity || (id == null && domainClass.getCompositeIdentity() != null)) { - compositeIdBinder.bindCompositeId(domainClass, root, (CompositeIdentity) id, mappings, sessionFactoryBeanName); + compositeIdBinder.bindCompositeId(domainClass, root, (CompositeIdentity) id, mappings); } else { Identity identity = id instanceof Identity ? (Identity) id : null; if (identity != null && identity.getName() == null) { 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 b2e1ee3785..84bffa8bb3 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 @@ -2,7 +2,6 @@ package org.grails.orm.hibernate.cfg.domainbinding.secondpass; import jakarta.annotation.Nonnull; import org.grails.datastore.mapping.model.DatastoreConfigurationException; -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; @@ -35,6 +34,7 @@ import org.slf4j.LoggerFactory; import org.springframework.util.StringUtils; import java.util.*; +import java.util.Map; import java.util.Set; import static org.grails.orm.hibernate.cfg.GrailsDomainBinder.*; @@ -89,7 +89,7 @@ public class CollectionSecondPassBinder { public void bindCollectionSecondPass(HibernateToManyProperty property, @Nonnull InFlightMetadataCollector mappings, - java.util.Map<?, ?> persistentClasses, Collection collection, String sessionFactoryBeanName) { + Map<?, ?> persistentClasses, Collection collection) { PersistentClass associatedClass = null; if (LOG.isDebugEnabled()) @@ -179,7 +179,7 @@ public class CollectionSecondPassBinder { } else if ((otherSide instanceof HibernateManyToManyProperty) || java.util.Map.class.isAssignableFrom(property.getType())) { - bindDependentKeyValue(property, key, mappings, sessionFactoryBeanName); + bindDependentKeyValue(property, key); } @@ -193,7 +193,7 @@ public class CollectionSecondPassBinder { } else { - bindDependentKeyValue(property, key, mappings, sessionFactoryBeanName); + bindDependentKeyValue(property, key); } @@ -377,8 +377,7 @@ public class CollectionSecondPassBinder { element.setReferencedEntityName(property.getOwner().getName()); } - private void bindDependentKeyValue(GrailsHibernatePersistentProperty property, DependantValue key, - @Nonnull InFlightMetadataCollector mappings, String sessionFactoryBeanName) { + private void bindDependentKeyValue(GrailsHibernatePersistentProperty property, DependantValue key) { if (LOG.isDebugEnabled()) { LOG.debug("[CollectionSecondPassBinder] binding [" + property.getName() + "] with dependant key"); diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/ListSecondPass.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/ListSecondPass.java index ba6ad08a45..0058b1d52b 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/ListSecondPass.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/ListSecondPass.java @@ -19,15 +19,13 @@ public class ListSecondPass implements org.hibernate.boot.spi.SecondPass, Grails protected final HibernateToManyProperty property; protected final @Nonnull InFlightMetadataCollector mappings; protected final Collection collection; - protected final String sessionFactoryBeanName; public ListSecondPass(ListSecondPassBinder listSecondPassBinder, HibernateToManyProperty property, @Nonnull InFlightMetadataCollector mappings, - Collection coll, String sessionFactoryBeanName) { + Collection coll) { this.listSecondPassBinder = listSecondPassBinder; this.property = property; this.mappings = mappings; this.collection = coll; - this.sessionFactoryBeanName = sessionFactoryBeanName; } @@ -35,7 +33,7 @@ public class ListSecondPass implements org.hibernate.boot.spi.SecondPass, Grails @Override public void doSecondPass(Map persistentClasses) throws MappingException { listSecondPassBinder.bindListSecondPass(property, mappings, persistentClasses, - (org.hibernate.mapping.List) collection, sessionFactoryBeanName); + (org.hibernate.mapping.List) collection); createCollectionKeys(collection); } 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 c9eed1ffee..85f5d08d33 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 @@ -16,6 +16,7 @@ import org.hibernate.mapping.Backref; import org.hibernate.mapping.BasicValue; import org.hibernate.mapping.DependantValue; import org.hibernate.mapping.IndexBackref; +import org.hibernate.mapping.List; import org.hibernate.mapping.ManyToOne; import org.hibernate.mapping.OneToMany; import org.hibernate.mapping.PersistentClass; @@ -44,9 +45,9 @@ public class ListSecondPassBinder { } public void bindListSecondPass(HibernateToManyProperty property, @Nonnull InFlightMetadataCollector mappings, - Map<?, ?> persistentClasses, org.hibernate.mapping.List list, String sessionFactoryBeanName) { + Map<?, ?> persistentClasses, List list) { - collectionSecondPassBinder.bindCollectionSecondPass(property, mappings, persistentClasses, list, sessionFactoryBeanName); + collectionSecondPassBinder.bindCollectionSecondPass(property, mappings, persistentClasses, list); String columnName = property.getIndexColumnName(namingStrategy); final boolean isManyToMany = property instanceof HibernateManyToManyProperty; diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/MapSecondPass.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/MapSecondPass.java index d6e1a987de..7574c35a7f 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/MapSecondPass.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/MapSecondPass.java @@ -19,15 +19,13 @@ public class MapSecondPass implements org.hibernate.boot.spi.SecondPass, GrailsS protected final HibernateToManyProperty property; protected final @Nonnull InFlightMetadataCollector mappings; protected final Collection collection; - protected final String sessionFactoryBeanName; public MapSecondPass(MapSecondPassBinder mapSecondPassBinder, HibernateToManyProperty property, @Nonnull InFlightMetadataCollector mappings, - Collection coll, String sessionFactoryBeanName) { + Collection coll) { this.mapSecondPassBinder = mapSecondPassBinder; this.property = property; this.mappings = mappings; this.collection = coll; - this.sessionFactoryBeanName = sessionFactoryBeanName; } @@ -36,7 +34,7 @@ public class MapSecondPass implements org.hibernate.boot.spi.SecondPass, GrailsS @Override public void doSecondPass(Map persistentClasses) throws MappingException { mapSecondPassBinder.bindMapSecondPass(property, mappings, persistentClasses, - (org.hibernate.mapping.Map) collection, sessionFactoryBeanName); + (org.hibernate.mapping.Map) collection); createCollectionKeys(collection); } diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/MapSecondPassBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/MapSecondPassBinder.java index 4a599afd2c..ab462f3242 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/MapSecondPassBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/MapSecondPassBinder.java @@ -42,8 +42,8 @@ public class MapSecondPassBinder { } public void bindMapSecondPass(HibernateToManyProperty property, @Nonnull InFlightMetadataCollector mappings, - Map<?, ?> persistentClasses, org.hibernate.mapping.Map map, String sessionFactoryBeanName) { - collectionSecondPassBinder.bindCollectionSecondPass(property, mappings, persistentClasses, map, sessionFactoryBeanName); + Map<?, ?> persistentClasses, org.hibernate.mapping.Map map) { + collectionSecondPassBinder.bindCollectionSecondPass(property, mappings, persistentClasses, map); SimpleValue value = new BasicValue(metadataBuildingContext, map.getCollectionTable()); String type = ((GrailsHibernatePersistentProperty) property).getIndexColumnType("string"); diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/SetSecondPass.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/SetSecondPass.java index b3c7c5416c..485152b9ef 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/SetSecondPass.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/SetSecondPass.java @@ -27,25 +27,22 @@ public class SetSecondPass implements org.hibernate.boot.spi.SecondPass, GrailsS protected final HibernateToManyProperty property; protected final @Nonnull InFlightMetadataCollector mappings; protected final Collection collection; - protected final String sessionFactoryBeanName; public SetSecondPass(CollectionSecondPassBinder collectionSecondPassBinder, HibernateToManyProperty property, @Nonnull InFlightMetadataCollector mappings, - Collection coll, - String sessionFactoryBeanName) { + Collection coll) { this.collectionSecondPassBinder = collectionSecondPassBinder; this.property = property; this.mappings = mappings; this.collection = coll; - this.sessionFactoryBeanName = sessionFactoryBeanName; } @SuppressWarnings("rawtypes") public void doSecondPass(Map persistentClasses) throws MappingException { - collectionSecondPassBinder.bindCollectionSecondPass(property, mappings, persistentClasses, collection, sessionFactoryBeanName); + collectionSecondPassBinder.bindCollectionSecondPass(property, mappings, persistentClasses, collection); createCollectionKeys(collection); } } 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 9f8b6969c4..b4219bea59 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 @@ -37,6 +37,12 @@ import org.grails.orm.hibernate.cfg.domainbinding.util.PropertyFromValueCreator import org.grails.orm.hibernate.cfg.domainbinding.binder.ComponentPropertyBinder import org.grails.orm.hibernate.cfg.domainbinding.util.BasicValueIdCreator +import org.grails.orm.hibernate.cfg.domainbinding.binder.ClassPropertiesBinder +import org.grails.orm.hibernate.cfg.domainbinding.util.MultiTenantFilterBinder +import org.grails.orm.hibernate.cfg.domainbinding.binder.JoinedSubClassBinder +import org.grails.orm.hibernate.cfg.domainbinding.binder.UnionSubclassBinder +import org.grails.orm.hibernate.cfg.domainbinding.binder.SingleTableSubclassBinder + class CollectionBinderSpec extends HibernateGormDatastoreSpec { protected Map getBinders(GrailsDomainBinder binder) { @@ -71,6 +77,7 @@ class CollectionBinderSpec extends HibernateGormDatastoreSpec { compositeIdentifierToManyToOneBinder, simpleValueColumnFetcher ) + PropertyFromValueCreator propertyFromValueCreator = new PropertyFromValueCreator() ComponentPropertyBinder componentPropertyBinder = new ComponentPropertyBinder( metadataBuildingContext, namingStrategy, @@ -79,7 +86,7 @@ class CollectionBinderSpec extends HibernateGormDatastoreSpec { collectionHolder, enumTypeBinderToUse, collectionBinder, - new PropertyFromValueCreator(), + propertyFromValueCreator, null, simpleValueBinder, oneToOneBinder, @@ -97,7 +104,7 @@ class CollectionBinderSpec extends HibernateGormDatastoreSpec { columnNameForPropertyAndPathFetcher, oneToOneBinder, manyToOneBinder, - new PropertyFromValueCreator() + propertyFromValueCreator ) CompositeIdBinder compositeIdBinder = new CompositeIdBinder(metadataBuildingContext, componentPropertyBinder) PropertyBinder propertyBinderHelper = new PropertyBinder() @@ -105,19 +112,41 @@ class CollectionBinderSpec extends HibernateGormDatastoreSpec { IdentityBinder identityBinder = new IdentityBinder(simpleIdBinder, compositeIdBinder) VersionBinder versionBinder = new VersionBinder(metadataBuildingContext, simpleValueBinder, propertyBinderHelper, BasicValue::new) + ClassBinder classBinder = new ClassBinder() + ClassPropertiesBinder classPropertiesBinder = new ClassPropertiesBinder(propertyBinder, propertyFromValueCreator) + MultiTenantFilterBinder multiTenantFilterBinder = new MultiTenantFilterBinder() + JoinedSubClassBinder joinedSubClassBinder = new JoinedSubClassBinder(metadataBuildingContext, namingStrategy, new org.grails.orm.hibernate.cfg.domainbinding.binder.SimpleValueColumnBinder(), columnNameForPropertyAndPathFetcher, classBinder) + UnionSubclassBinder unionSubclassBinder = new UnionSubclassBinder(metadataBuildingContext, namingStrategy, classBinder) + SingleTableSubclassBinder singleTableSubclassBinder = new SingleTableSubclassBinder(classBinder) + return [ propertyBinder: propertyBinder, collectionBinder: collectionBinder, identityBinder: identityBinder, versionBinder: versionBinder, defaultColumnNameFetcher: defaultColumnNameFetcher, - columnNameForPropertyAndPathFetcher: columnNameForPropertyAndPathFetcher + columnNameForPropertyAndPathFetcher: columnNameForPropertyAndPathFetcher, + classBinder: classBinder, + classPropertiesBinder: classPropertiesBinder, + multiTenantFilterBinder: multiTenantFilterBinder, + joinedSubClassBinder: joinedSubClassBinder, + unionSubclassBinder: unionSubclassBinder, + singleTableSubclassBinder: singleTableSubclassBinder ] } protected void bindRoot(GrailsDomainBinder binder, GrailsHibernatePersistentEntity entity, InFlightMetadataCollector mappings, String sessionFactoryBeanName) { def binders = getBinders(binder) - binder.bindRoot(entity, mappings, sessionFactoryBeanName, binders.defaultColumnNameFetcher, binders.columnNameForPropertyAndPathFetcher, binders.identityBinder as IdentityBinder, binders.versionBinder as VersionBinder, binders.propertyBinder as GrailsPropertyBinder, new ClassBinder(), new PropertyFromValueCreator()) + binder.bindRoot(entity, mappings, sessionFactoryBeanName, + binders.defaultColumnNameFetcher, + binders.identityBinder as IdentityBinder, + binders.versionBinder as VersionBinder, + binders.classBinder as ClassBinder, + binders.classPropertiesBinder as ClassPropertiesBinder, + binders.multiTenantFilterBinder as MultiTenantFilterBinder, + binders.joinedSubClassBinder as JoinedSubClassBinder, + binders.unionSubclassBinder as UnionSubclassBinder, + binders.singleTableSubclassBinder as SingleTableSubclassBinder) } void setupSpec() { @@ -145,7 +174,7 @@ class CollectionBinderSpec extends HibernateGormDatastoreSpec { def collection = new Set(binder.getMetadataBuildingContext(), rootClass) when: - collectionBinder.bindCollection(petsProp, collection, rootClass, collector, "", "sessionFactory") + collectionBinder.bindCollection(petsProp, collection, rootClass, collector, "") then: collection.role == "${personEntity.name}.pets".toString() 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 5c4163b15f..28f3f8b16e 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 @@ -39,6 +39,12 @@ import org.grails.orm.hibernate.cfg.domainbinding.binder.PropertyBinder import org.grails.orm.hibernate.cfg.domainbinding.util.PropertyFromValueCreator import org.hibernate.mapping.BasicValue +import org.grails.orm.hibernate.cfg.domainbinding.binder.ClassPropertiesBinder +import org.grails.orm.hibernate.cfg.domainbinding.util.MultiTenantFilterBinder +import org.grails.orm.hibernate.cfg.domainbinding.binder.JoinedSubClassBinder +import org.grails.orm.hibernate.cfg.domainbinding.binder.UnionSubclassBinder +import org.grails.orm.hibernate.cfg.domainbinding.binder.SingleTableSubclassBinder + class CollectionSecondPassBinderSpec extends HibernateGormDatastoreSpec { protected Map getBinders(GrailsDomainBinder binder) { @@ -73,6 +79,7 @@ class CollectionSecondPassBinderSpec extends HibernateGormDatastoreSpec { compositeIdentifierToManyToOneBinder, simpleValueColumnFetcher ) + PropertyFromValueCreator propertyFromValueCreator = new PropertyFromValueCreator() ComponentPropertyBinder componentPropertyBinder = new ComponentPropertyBinder( metadataBuildingContext, namingStrategy, @@ -81,7 +88,7 @@ class CollectionSecondPassBinderSpec extends HibernateGormDatastoreSpec { collectionHolder, enumTypeBinderToUse, collectionBinder, - new PropertyFromValueCreator(), + propertyFromValueCreator, null, simpleValueBinder, oneToOneBinder, @@ -99,7 +106,7 @@ class CollectionSecondPassBinderSpec extends HibernateGormDatastoreSpec { columnNameForPropertyAndPathFetcher, oneToOneBinder, manyToOneBinder, - new PropertyFromValueCreator() + propertyFromValueCreator ) CompositeIdBinder compositeIdBinder = new CompositeIdBinder(metadataBuildingContext, componentPropertyBinder) PropertyBinder propertyBinderHelper = new PropertyBinder() @@ -107,21 +114,42 @@ class CollectionSecondPassBinderSpec extends HibernateGormDatastoreSpec { IdentityBinder identityBinder = new IdentityBinder(simpleIdBinder, compositeIdBinder) VersionBinder versionBinder = new VersionBinder(metadataBuildingContext, simpleValueBinder, propertyBinderHelper, BasicValue::new) + ClassBinder classBinder = new ClassBinder() + ClassPropertiesBinder classPropertiesBinder = new ClassPropertiesBinder(propertyBinder, propertyFromValueCreator) + MultiTenantFilterBinder multiTenantFilterBinder = new MultiTenantFilterBinder() + JoinedSubClassBinder joinedSubClassBinder = new JoinedSubClassBinder(metadataBuildingContext, namingStrategy, new org.grails.orm.hibernate.cfg.domainbinding.binder.SimpleValueColumnBinder(), columnNameForPropertyAndPathFetcher, classBinder) + UnionSubclassBinder unionSubclassBinder = new UnionSubclassBinder(metadataBuildingContext, namingStrategy, classBinder) + SingleTableSubclassBinder singleTableSubclassBinder = new SingleTableSubclassBinder(classBinder) + return [ propertyBinder: propertyBinder, collectionBinder: collectionBinder, identityBinder: identityBinder, versionBinder: versionBinder, defaultColumnNameFetcher: defaultColumnNameFetcher, - columnNameForPropertyAndPathFetcher: columnNameForPropertyAndPathFetcher + columnNameForPropertyAndPathFetcher: columnNameForPropertyAndPathFetcher, + classBinder: classBinder, + classPropertiesBinder: classPropertiesBinder, + multiTenantFilterBinder: multiTenantFilterBinder, + joinedSubClassBinder: joinedSubClassBinder, + unionSubclassBinder: unionSubclassBinder, + singleTableSubclassBinder: singleTableSubclassBinder ] } protected void bindRoot(GrailsDomainBinder binder, GrailsHibernatePersistentEntity entity, InFlightMetadataCollector mappings, String sessionFactoryBeanName) { def binders = getBinders(binder) - binder.bindRoot(entity, mappings, sessionFactoryBeanName, binders.defaultColumnNameFetcher, binders.columnNameForPropertyAndPathFetcher, binders.identityBinder as IdentityBinder, binders.versionBinder as VersionBinder, binders.propertyBinder as GrailsPropertyBinder, new ClassBinder(), new PropertyFromValueCreator()) + binder.bindRoot(entity, mappings, sessionFactoryBeanName, + binders.defaultColumnNameFetcher, + binders.identityBinder as IdentityBinder, + binders.versionBinder as VersionBinder, + binders.classBinder as ClassBinder, + binders.classPropertiesBinder as ClassPropertiesBinder, + binders.multiTenantFilterBinder as MultiTenantFilterBinder, + binders.joinedSubClassBinder as JoinedSubClassBinder, + binders.unionSubclassBinder as UnionSubclassBinder, + binders.singleTableSubclassBinder as SingleTableSubclassBinder) } - void setupSpec() { manager.addAllDomainClasses([ Author, @@ -173,7 +201,7 @@ class CollectionSecondPassBinderSpec extends HibernateGormDatastoreSpec { set.setRole(authorEntity.name + ".books") // Initial first pass binding - collectionBinder.bindCollection(booksProp, set, rootClass, collector, "", "sessionFactory") + collectionBinder.bindCollection(booksProp, set, rootClass, collector, "") // Prepare persistentClasses map Map persistentClasses = [ @@ -182,7 +210,7 @@ class CollectionSecondPassBinderSpec extends HibernateGormDatastoreSpec { ] when: - collectionSecondPassBinder.bindCollectionSecondPass(booksProp, collector, persistentClasses, set, "sessionFactory") + collectionSecondPassBinder.bindCollectionSecondPass(booksProp, collector, persistentClasses, set) collector.processSecondPasses(binder.getMetadataBuildingContext()) then: 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 abeb1d5d76..05ae419043 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 @@ -1,7 +1,6 @@ package org.grails.orm.hibernate.cfg.domainbinding import grails.gorm.specs.HibernateGormDatastoreSpec -import org.grails.datastore.mapping.model.PersistentProperty import org.grails.orm.hibernate.cfg.GrailsHibernatePersistentProperty import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateEmbeddedProperty import org.grails.orm.hibernate.cfg.GrailsHibernatePersistentEntity @@ -53,13 +52,13 @@ class ComponentBinderSpec extends HibernateGormDatastoreSpec { def mappings = metadataBuildingContext.getMetadataCollector() when: - binder.bindComponent(component, embeddedProp, mappings, "sessionFactory") + binder.bindComponent(component, embeddedProp, mappings) then: component.getComponentClassName() == Address.name component.getRoleName() == Address.name + ".address" 1 * mappingCacheHolder.cacheMapping(associatedEntity) - 1 * componentPropertyBinder.bindComponentProperty(_, _, _, _, _, _, _, _) + 1 * componentPropertyBinder.bindComponentProperty(_, _, _, _, _, _, _) } static class MyEntity {} diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ComponentPropertyBinderSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ComponentPropertyBinderSpec.groovy index 1189d3cfd1..0a4df79439 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ComponentPropertyBinderSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ComponentPropertyBinderSpec.groovy @@ -5,17 +5,13 @@ import org.grails.datastore.mapping.model.MappingContext import org.grails.datastore.mapping.model.PersistentEntity import org.grails.datastore.mapping.model.PersistentProperty import org.grails.datastore.mapping.model.types.Association -import org.grails.datastore.mapping.model.types.ManyToOne as GormManyToOne -import org.grails.datastore.mapping.model.types.OneToOne as GormOneToOne import org.grails.orm.hibernate.cfg.GrailsHibernatePersistentEntity import org.grails.orm.hibernate.cfg.GrailsHibernatePersistentProperty import org.grails.orm.hibernate.cfg.Mapping import org.grails.orm.hibernate.cfg.MappingCacheHolder import org.grails.orm.hibernate.cfg.PersistentEntityNamingStrategy import org.grails.orm.hibernate.cfg.PropertyConfig -import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateManyToManyProperty import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateManyToOneProperty -import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateOneToManyProperty import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateOneToOneProperty import org.grails.orm.hibernate.cfg.domainbinding.binder.CollectionBinder import org.grails.orm.hibernate.cfg.domainbinding.binder.ComponentBinder @@ -124,7 +120,7 @@ class ComponentPropertyBinderSpec extends HibernateGormDatastoreSpec { propertyFromValueCreator.createProperty(_ as BasicValue, currentGrailsProp) >> hibernateProperty when: - binder.bindComponentProperty(component, componentProperty, currentGrailsProp, root, "address", table, mappings, "sessionFactory") + binder.bindComponentProperty(component, componentProperty, currentGrailsProp, root, "address", table, mappings) then: 1 * mockSimpleValueBinder.bindSimpleValue(currentGrailsProp, componentProperty, _ as BasicValue, "address") @@ -159,7 +155,7 @@ class ComponentPropertyBinderSpec extends HibernateGormDatastoreSpec { propertyFromValueCreator.createProperty(_ as HibernateManyToOne, currentGrailsProp) >> hibernateProperty when: - binder.bindComponentProperty(component, componentProperty, currentGrailsProp, root, "address", table, mappings, "sessionFactory") + binder.bindComponentProperty(component, componentProperty, currentGrailsProp, root, "address", table, mappings) then: 1 * propertyFromValueCreator.createProperty(_ as HibernateManyToOne, currentGrailsProp) >> hibernateProperty @@ -198,7 +194,7 @@ class ComponentPropertyBinderSpec extends HibernateGormDatastoreSpec { propertyFromValueCreator.createProperty(_ as HibernateOneToOne, currentGrailsProp) >> hibernateProperty when: - binder.bindComponentProperty(component, componentProperty, currentGrailsProp, root, "address", table, mappings, "sessionFactory") + binder.bindComponentProperty(component, componentProperty, currentGrailsProp, root, "address", table, mappings) then: 1 * propertyFromValueCreator.createProperty(_ as HibernateOneToOne, currentGrailsProp) >> hibernateProperty @@ -231,7 +227,7 @@ class ComponentPropertyBinderSpec extends HibernateGormDatastoreSpec { propertyFromValueCreator.createProperty(_ as BasicValue, currentGrailsProp) >> hibernateProperty when: - binder.bindComponentProperty(component, componentProperty, currentGrailsProp, root, "address", table, mappings, "sessionFactory") + binder.bindComponentProperty(component, componentProperty, currentGrailsProp, root, "address", table, mappings) then: 1 * enumTypeBinder.bindEnumType(currentGrailsProp, MyEnum, _ as BasicValue, "address_type_col") @@ -262,7 +258,7 @@ class ComponentPropertyBinderSpec extends HibernateGormDatastoreSpec { propertyFromValueCreator.createProperty(_ as BasicValue, currentGrailsProp) >> hibernateProperty when: - binder.bindComponentProperty(component, componentProperty, currentGrailsProp, root, "address", table, mappings, "sessionFactory") + binder.bindComponentProperty(component, componentProperty, currentGrailsProp, root, "address", table, mappings) then: 1 * mockSimpleValueBinder.bindSimpleValue( diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/CompositeIdBinderSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/CompositeIdBinderSpec.groovy index 10d754596c..cc66523f39 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/CompositeIdBinderSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/CompositeIdBinderSpec.groovy @@ -47,13 +47,13 @@ class CompositeIdBinderSpec extends HibernateGormDatastoreSpec { root.setTable(table) when: - binder.bindCompositeId(domainClass, root, compositeIdentity, mappings, "sessionFactory") + binder.bindCompositeId(domainClass, root, compositeIdentity, mappings) then: root.getIdentifier() instanceof Component root.getIdentifierMapper() instanceof Component root.hasEmbeddedIdentifier() - 2 * componentPropertyBinder.bindComponentProperty(_ as Component, identifierProp, _ as PersistentProperty, root, "", table, mappings, "sessionFactory") + 2 * componentPropertyBinder.bindComponentProperty(_ as Component, identifierProp, _ as PersistentProperty, root, "", table, mappings) } def "should fallback to domainClass composite identity when CompositeIdentity is null"() { @@ -74,10 +74,10 @@ class CompositeIdBinderSpec extends HibernateGormDatastoreSpec { root.setTable(table) when: - binder.bindCompositeId(domainClass, root, null, mappings, "sessionFactory") + binder.bindCompositeId(domainClass, root, null, mappings) then: - 1 * componentPropertyBinder.bindComponentProperty(_ as Component, identifierProp, prop1, root, "", table, mappings, "sessionFactory") + 1 * componentPropertyBinder.bindComponentProperty(_ as Component, identifierProp, prop1, root, "", table, mappings) } def "should throw MappingException if no composite properties found"() { @@ -91,7 +91,7 @@ class CompositeIdBinderSpec extends HibernateGormDatastoreSpec { domainClass.getName() >> "MyEntity" when: - binder.bindCompositeId(domainClass, root, null, mappings, "sessionFactory") + binder.bindCompositeId(domainClass, root, null, mappings) then: thrown(org.hibernate.MappingException) 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 75f29d47b5..f2d70c1df4 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 @@ -33,8 +33,6 @@ import org.grails.orm.hibernate.cfg.domainbinding.binder.ManyToOneValuesBinder import org.grails.orm.hibernate.cfg.domainbinding.binder.CompositeIdentifierToManyToOneBinder import org.grails.orm.hibernate.cfg.domainbinding.util.SimpleValueColumnFetcher import org.grails.orm.hibernate.cfg.domainbinding.util.TableNameFetcher -import org.grails.orm.hibernate.cfg.domainbinding.binder.SimpleValueColumnBinder - import org.grails.orm.hibernate.cfg.domainbinding.binder.IdentityBinder import org.grails.orm.hibernate.cfg.domainbinding.binder.VersionBinder import org.grails.orm.hibernate.cfg.domainbinding.binder.CompositeIdBinder @@ -43,6 +41,12 @@ import org.grails.orm.hibernate.cfg.domainbinding.binder.PropertyBinder import org.grails.orm.hibernate.cfg.domainbinding.util.BasicValueIdCreator import org.hibernate.boot.spi.InFlightMetadataCollector +import org.grails.orm.hibernate.cfg.domainbinding.binder.ClassPropertiesBinder +import org.grails.orm.hibernate.cfg.domainbinding.util.MultiTenantFilterBinder +import org.grails.orm.hibernate.cfg.domainbinding.binder.JoinedSubClassBinder +import org.grails.orm.hibernate.cfg.domainbinding.binder.UnionSubclassBinder +import org.grails.orm.hibernate.cfg.domainbinding.binder.SingleTableSubclassBinder + class GrailsPropertyBinderSpec extends HibernateGormDatastoreSpec { protected Map getBinders(GrailsDomainBinder binder) { @@ -77,6 +81,7 @@ class GrailsPropertyBinderSpec extends HibernateGormDatastoreSpec { compositeIdentifierToManyToOneBinder, simpleValueColumnFetcher ) + PropertyFromValueCreator propertyFromValueCreator = new PropertyFromValueCreator() ComponentPropertyBinder componentPropertyBinder = new ComponentPropertyBinder( metadataBuildingContext, namingStrategy, @@ -85,7 +90,7 @@ class GrailsPropertyBinderSpec extends HibernateGormDatastoreSpec { collectionHolder, enumTypeBinderToUse, collectionBinder, - new PropertyFromValueCreator(), + propertyFromValueCreator, null, simpleValueBinder, oneToOneBinder, @@ -103,13 +108,20 @@ class GrailsPropertyBinderSpec extends HibernateGormDatastoreSpec { columnNameForPropertyAndPathFetcher, oneToOneBinder, manyToOneBinder, - new PropertyFromValueCreator() + propertyFromValueCreator ) CompositeIdBinder compositeIdBinder = new CompositeIdBinder(metadataBuildingContext, componentPropertyBinder) PropertyBinder propertyBinderHelper = new PropertyBinder() SimpleIdBinder simpleIdBinder = new SimpleIdBinder(metadataBuildingContext, namingStrategy, jdbcEnvironment, new BasicValueIdCreator(jdbcEnvironment), simpleValueBinder, propertyBinderHelper) IdentityBinder identityBinder = new IdentityBinder(simpleIdBinder, compositeIdBinder) VersionBinder versionBinder = new VersionBinder(metadataBuildingContext, simpleValueBinder, propertyBinderHelper, BasicValue::new) + + ClassBinder classBinder = new ClassBinder() + ClassPropertiesBinder classPropertiesBinder = new ClassPropertiesBinder(propertyBinder, propertyFromValueCreator) + MultiTenantFilterBinder multiTenantFilterBinder = new MultiTenantFilterBinder() + JoinedSubClassBinder joinedSubClassBinder = new JoinedSubClassBinder(metadataBuildingContext, namingStrategy, new org.grails.orm.hibernate.cfg.domainbinding.binder.SimpleValueColumnBinder(), columnNameForPropertyAndPathFetcher, classBinder) + UnionSubclassBinder unionSubclassBinder = new UnionSubclassBinder(metadataBuildingContext, namingStrategy, classBinder) + SingleTableSubclassBinder singleTableSubclassBinder = new SingleTableSubclassBinder(classBinder) return [ propertyBinder: propertyBinder, @@ -117,15 +129,29 @@ class GrailsPropertyBinderSpec extends HibernateGormDatastoreSpec { identityBinder: identityBinder, versionBinder: versionBinder, defaultColumnNameFetcher: defaultColumnNameFetcher, - columnNameForPropertyAndPathFetcher: columnNameForPropertyAndPathFetcher + columnNameForPropertyAndPathFetcher: columnNameForPropertyAndPathFetcher, + classBinder: classBinder, + classPropertiesBinder: classPropertiesBinder, + multiTenantFilterBinder: multiTenantFilterBinder, + joinedSubClassBinder: joinedSubClassBinder, + unionSubclassBinder: unionSubclassBinder, + singleTableSubclassBinder: singleTableSubclassBinder ] } protected void bindRoot(GrailsDomainBinder binder, GrailsHibernatePersistentEntity entity, InFlightMetadataCollector mappings, String sessionFactoryBeanName) { def binders = getBinders(binder) - binder.bindRoot(entity, mappings, sessionFactoryBeanName, binders.defaultColumnNameFetcher, binders.columnNameForPropertyAndPathFetcher, binders.identityBinder as IdentityBinder, binders.versionBinder as VersionBinder, binders.propertyBinder as GrailsPropertyBinder, new ClassBinder(), new PropertyFromValueCreator()) + binder.bindRoot(entity, mappings, sessionFactoryBeanName, + binders.defaultColumnNameFetcher, + binders.identityBinder as IdentityBinder, + binders.versionBinder as VersionBinder, + binders.classBinder as ClassBinder, + binders.classPropertiesBinder as ClassPropertiesBinder, + binders.multiTenantFilterBinder as MultiTenantFilterBinder, + binders.joinedSubClassBinder as JoinedSubClassBinder, + binders.unionSubclassBinder as UnionSubclassBinder, + binders.singleTableSubclassBinder as SingleTableSubclassBinder) } - void setupSpec() { manager.addAllDomainClasses([ org.apache.grails.data.testing.tck.domains.Pet, @@ -148,7 +174,7 @@ class GrailsPropertyBinderSpec extends HibernateGormDatastoreSpec { when: def titleProp = persistentEntity.getPropertyByName("title") as GrailsHibernatePersistentProperty - Value value = propertyBinder.bindProperty(rootClass, titleProp, collector, "sessionFactory") + Value value = propertyBinder.bindProperty(rootClass, titleProp, collector) rootClass.addProperty(new PropertyFromValueCreator().createProperty(value, titleProp)) then: @@ -170,7 +196,7 @@ class GrailsPropertyBinderSpec extends HibernateGormDatastoreSpec { when: def statusProp = persistentEntity.getPropertyByName("status") as GrailsHibernatePersistentProperty - Value value = propertyBinder.bindProperty(rootClass, statusProp, collector, "sessionFactory") + Value value = propertyBinder.bindProperty(rootClass, statusProp, collector) rootClass.addProperty(new PropertyFromValueCreator().createProperty(value, statusProp)) then: @@ -196,7 +222,7 @@ class GrailsPropertyBinderSpec extends HibernateGormDatastoreSpec { when: def ownerProp = petEntity.getPropertyByName("owner") as GrailsHibernatePersistentProperty - Value value = propertyBinder.bindProperty(rootClass, ownerProp, collector, "sessionFactory") + Value value = propertyBinder.bindProperty(rootClass, ownerProp, collector) rootClass.addProperty(new PropertyFromValueCreator().createProperty(value, ownerProp)) then: @@ -219,7 +245,7 @@ class GrailsPropertyBinderSpec extends HibernateGormDatastoreSpec { when: def addressProp = persistentEntity.getPropertyByName("homeAddress") as GrailsHibernatePersistentProperty - Value value = propertyBinder.bindProperty(rootClass, addressProp, collector, "sessionFactory") + Value value = propertyBinder.bindProperty(rootClass, addressProp, collector) rootClass.addProperty(new PropertyFromValueCreator().createProperty(value, addressProp)) then: @@ -247,7 +273,7 @@ class GrailsPropertyBinderSpec extends HibernateGormDatastoreSpec { when: def petsProp = personEntity.getPropertyByName("pets") as GrailsHibernatePersistentProperty - Value value = propertyBinder.bindProperty(rootClass, petsProp, collector, "sessionFactory") + Value value = propertyBinder.bindProperty(rootClass, petsProp, collector) rootClass.addProperty(new PropertyFromValueCreator().createProperty(value, petsProp)) then: @@ -286,7 +312,7 @@ class GrailsPropertyBinderSpec extends HibernateGormDatastoreSpec { when: def booksProp = authorEntity.getPropertyByName("books") as GrailsHibernatePersistentProperty - Value value = propertyBinder.bindProperty(rootClass, booksProp, collector, "sessionFactory") + Value value = propertyBinder.bindProperty(rootClass, booksProp, collector) rootClass.addProperty(new PropertyFromValueCreator().createProperty(value, booksProp)) collector.processSecondPasses(binder.getMetadataBuildingContext()) @@ -325,7 +351,7 @@ class GrailsPropertyBinderSpec extends HibernateGormDatastoreSpec { when: def booksProp = authorEntity.getPropertyByName("books") as GrailsHibernatePersistentProperty - Value value = propertyBinder.bindProperty(rootClass, booksProp, collector, "sessionFactory") + Value value = propertyBinder.bindProperty(rootClass, booksProp, collector) rootClass.addProperty(new PropertyFromValueCreator().createProperty(value, booksProp)) collector.processSecondPasses(binder.getMetadataBuildingContext()) @@ -386,7 +412,7 @@ class GrailsPropertyBinderSpec extends HibernateGormDatastoreSpec { when: def childBookProp = authorEntity.getPropertyByName("childBook") as GrailsHibernatePersistentProperty - Value value = propertyBinder.bindProperty(rootClass, childBookProp, collector, "sessionFactory") + Value value = propertyBinder.bindProperty(rootClass, childBookProp, collector) rootClass.addProperty(new PropertyFromValueCreator().createProperty(value, childBookProp)) // Process second passes to ensure Hibernate's internal mappings are finalized collector.processSecondPasses(binder.getMetadataBuildingContext()) @@ -454,7 +480,7 @@ class GrailsPropertyBinderSpec extends HibernateGormDatastoreSpec { when: // Capture the return value of bindProperty - def resultValue = propertyBinder.bindProperty(rootClass, currentGrailsProp, mappings, "sessionFactory") + def resultValue = propertyBinder.bindProperty(rootClass, currentGrailsProp, mappings) then: // Assert that bindProperty returns a Value object diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/IdentityBinderSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/IdentityBinderSpec.groovy index 34b95b3470..25cf3521de 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/IdentityBinderSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/IdentityBinderSpec.groovy @@ -37,7 +37,7 @@ class IdentityBinderSpec extends HibernateGormDatastoreSpec { domainClass.getCompositeIdentity() >> null when: - binder.bindIdentity(domainClass, root, mappings, null, "sessionFactory") + binder.bindIdentity(domainClass, root, mappings, null) then: 1 * simpleIdBinder.bindSimpleId(domainClass, root, null, _) @@ -52,10 +52,10 @@ class IdentityBinderSpec extends HibernateGormDatastoreSpec { domainClass.getCompositeIdentity() >> compositeProps when: - binder.bindIdentity(domainClass, root, mappings, null, "sessionFactory") + binder.bindIdentity(domainClass, root, mappings, null) then: - 1 * compositeIdBinder.bindCompositeId(domainClass, root, null, mappings, "sessionFactory") + 1 * compositeIdBinder.bindCompositeId(domainClass, root, null, mappings) } def "should delegate to compositeIdBinder when mapping specifies composite identity"() { @@ -68,10 +68,10 @@ class IdentityBinderSpec extends HibernateGormDatastoreSpec { gormMapping.getIdentity() >> compositeIdentity when: - binder.bindIdentity(domainClass, root, mappings, gormMapping, "sessionFactory") + binder.bindIdentity(domainClass, root, mappings, gormMapping) then: - 1 * compositeIdBinder.bindCompositeId(domainClass, root, compositeIdentity, mappings, "sessionFactory") + 1 * compositeIdBinder.bindCompositeId(domainClass, root, compositeIdentity, mappings) } def "should delegate to simpleIdBinder when mapping specifies simple identity"() { @@ -88,7 +88,7 @@ class IdentityBinderSpec extends HibernateGormDatastoreSpec { domainClass.getName() >> "MyEntity" when: - binder.bindIdentity(domainClass, root, mappings, gormMapping, "sessionFactory") + binder.bindIdentity(domainClass, root, mappings, gormMapping) then: 1 * simpleIdBinder.bindSimpleId(domainClass, root, identity, _) @@ -107,7 +107,7 @@ class IdentityBinderSpec extends HibernateGormDatastoreSpec { domainClass.getName() >> "MyEntity" when: - binder.bindIdentity(domainClass, root, mappings, gormMapping, "sessionFactory") + binder.bindIdentity(domainClass, root, mappings, gormMapping) then: 1 * simpleIdBinder.bindSimpleId(domainClass, root, identity, _) @@ -127,7 +127,7 @@ class IdentityBinderSpec extends HibernateGormDatastoreSpec { domainClass.getName() >> "MyEntity" when: - binder.bindIdentity(domainClass, root, mappings, gormMapping, "sessionFactory") + binder.bindIdentity(domainClass, root, mappings, gormMapping) then: identity.getName() == "MyEntity" 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 94ce5a94b0..d1fab3c61d 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 @@ -41,6 +41,12 @@ import org.grails.orm.hibernate.cfg.domainbinding.binder.PropertyBinder import org.grails.orm.hibernate.cfg.domainbinding.util.PropertyFromValueCreator import org.hibernate.mapping.BasicValue +import org.grails.orm.hibernate.cfg.domainbinding.binder.ClassPropertiesBinder +import org.grails.orm.hibernate.cfg.domainbinding.util.MultiTenantFilterBinder +import org.grails.orm.hibernate.cfg.domainbinding.binder.JoinedSubClassBinder +import org.grails.orm.hibernate.cfg.domainbinding.binder.UnionSubclassBinder +import org.grails.orm.hibernate.cfg.domainbinding.binder.SingleTableSubclassBinder + class ListSecondPassBinderSpec extends HibernateGormDatastoreSpec { protected Map getBinders(GrailsDomainBinder binder) { @@ -75,6 +81,7 @@ class ListSecondPassBinderSpec extends HibernateGormDatastoreSpec { compositeIdentifierToManyToOneBinder, simpleValueColumnFetcher ) + PropertyFromValueCreator propertyFromValueCreator = new PropertyFromValueCreator() ComponentPropertyBinder componentPropertyBinder = new ComponentPropertyBinder( metadataBuildingContext, namingStrategy, @@ -83,7 +90,7 @@ class ListSecondPassBinderSpec extends HibernateGormDatastoreSpec { collectionHolder, enumTypeBinderToUse, collectionBinder, - new PropertyFromValueCreator(), + propertyFromValueCreator, null, simpleValueBinder, oneToOneBinder, @@ -101,7 +108,7 @@ class ListSecondPassBinderSpec extends HibernateGormDatastoreSpec { columnNameForPropertyAndPathFetcher, oneToOneBinder, manyToOneBinder, - new PropertyFromValueCreator() + propertyFromValueCreator ) CompositeIdBinder compositeIdBinder = new CompositeIdBinder(metadataBuildingContext, componentPropertyBinder) PropertyBinder propertyBinderHelper = new PropertyBinder() @@ -109,21 +116,42 @@ class ListSecondPassBinderSpec extends HibernateGormDatastoreSpec { IdentityBinder identityBinder = new IdentityBinder(simpleIdBinder, compositeIdBinder) VersionBinder versionBinder = new VersionBinder(metadataBuildingContext, simpleValueBinder, propertyBinderHelper, BasicValue::new) + ClassBinder classBinder = new ClassBinder() + ClassPropertiesBinder classPropertiesBinder = new ClassPropertiesBinder(propertyBinder, propertyFromValueCreator) + MultiTenantFilterBinder multiTenantFilterBinder = new MultiTenantFilterBinder() + JoinedSubClassBinder joinedSubClassBinder = new JoinedSubClassBinder(metadataBuildingContext, namingStrategy, new org.grails.orm.hibernate.cfg.domainbinding.binder.SimpleValueColumnBinder(), columnNameForPropertyAndPathFetcher, classBinder) + UnionSubclassBinder unionSubclassBinder = new UnionSubclassBinder(metadataBuildingContext, namingStrategy, classBinder) + SingleTableSubclassBinder singleTableSubclassBinder = new SingleTableSubclassBinder(classBinder) + return [ propertyBinder: propertyBinder, collectionBinder: collectionBinder, identityBinder: identityBinder, versionBinder: versionBinder, defaultColumnNameFetcher: defaultColumnNameFetcher, - columnNameForPropertyAndPathFetcher: columnNameForPropertyAndPathFetcher + columnNameForPropertyAndPathFetcher: columnNameForPropertyAndPathFetcher, + classBinder: classBinder, + classPropertiesBinder: classPropertiesBinder, + multiTenantFilterBinder: multiTenantFilterBinder, + joinedSubClassBinder: joinedSubClassBinder, + unionSubclassBinder: unionSubclassBinder, + singleTableSubclassBinder: singleTableSubclassBinder ] } protected void bindRoot(GrailsDomainBinder binder, GrailsHibernatePersistentEntity entity, InFlightMetadataCollector mappings, String sessionFactoryBeanName) { def binders = getBinders(binder) - binder.bindRoot(entity, mappings, sessionFactoryBeanName, binders.defaultColumnNameFetcher, binders.columnNameForPropertyAndPathFetcher, binders.identityBinder as IdentityBinder, binders.versionBinder as VersionBinder, binders.propertyBinder as GrailsPropertyBinder, new ClassBinder(), new PropertyFromValueCreator()) + binder.bindRoot(entity, mappings, sessionFactoryBeanName, + binders.defaultColumnNameFetcher, + binders.identityBinder as IdentityBinder, + binders.versionBinder as VersionBinder, + binders.classBinder as ClassBinder, + binders.classPropertiesBinder as ClassPropertiesBinder, + binders.multiTenantFilterBinder as MultiTenantFilterBinder, + binders.joinedSubClassBinder as JoinedSubClassBinder, + binders.unionSubclassBinder as UnionSubclassBinder, + binders.singleTableSubclassBinder as SingleTableSubclassBinder) } - void setupSpec() { manager.addAllDomainClasses([ ListBinderAuthor, @@ -176,7 +204,7 @@ class ListSecondPassBinderSpec extends HibernateGormDatastoreSpec { list.setRole(authorEntity.name + ".books") // Initial first pass binding needed for second pass to work - collectionBinder.bindCollection(booksProp, list, rootClass, collector, "", "sessionFactory") + collectionBinder.bindCollection(booksProp, list, rootClass, collector, "") // Prepare persistentClasses map Map persistentClasses = [ @@ -185,8 +213,8 @@ class ListSecondPassBinderSpec extends HibernateGormDatastoreSpec { ] when: - collectionSecondPassBinder.bindCollectionSecondPass(booksProp, collector, persistentClasses, list, "sessionFactory") - listSecondPassBinder.bindListSecondPass(booksProp, collector, persistentClasses, list, "sessionFactory") + collectionSecondPassBinder.bindCollectionSecondPass(booksProp, collector, persistentClasses, list) + listSecondPassBinder.bindListSecondPass(booksProp, collector, persistentClasses, list) collector.processSecondPasses(binder.getMetadataBuildingContext()) then: 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 033e1f3a9f..036c650430 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 @@ -41,6 +41,12 @@ import org.grails.orm.hibernate.cfg.domainbinding.binder.PropertyBinder import org.grails.orm.hibernate.cfg.domainbinding.util.PropertyFromValueCreator import org.hibernate.mapping.BasicValue +import org.grails.orm.hibernate.cfg.domainbinding.binder.ClassPropertiesBinder +import org.grails.orm.hibernate.cfg.domainbinding.util.MultiTenantFilterBinder +import org.grails.orm.hibernate.cfg.domainbinding.binder.JoinedSubClassBinder +import org.grails.orm.hibernate.cfg.domainbinding.binder.UnionSubclassBinder +import org.grails.orm.hibernate.cfg.domainbinding.binder.SingleTableSubclassBinder + class MapSecondPassBinderSpec extends HibernateGormDatastoreSpec { protected Map getBinders(GrailsDomainBinder binder) { @@ -75,6 +81,7 @@ class MapSecondPassBinderSpec extends HibernateGormDatastoreSpec { compositeIdentifierToManyToOneBinder, simpleValueColumnFetcher ) + PropertyFromValueCreator propertyFromValueCreator = new PropertyFromValueCreator() ComponentPropertyBinder componentPropertyBinder = new ComponentPropertyBinder( metadataBuildingContext, namingStrategy, @@ -83,7 +90,7 @@ class MapSecondPassBinderSpec extends HibernateGormDatastoreSpec { collectionHolder, enumTypeBinderToUse, collectionBinder, - new PropertyFromValueCreator(), + propertyFromValueCreator, null, simpleValueBinder, oneToOneBinder, @@ -101,7 +108,7 @@ class MapSecondPassBinderSpec extends HibernateGormDatastoreSpec { columnNameForPropertyAndPathFetcher, oneToOneBinder, manyToOneBinder, - new PropertyFromValueCreator() + propertyFromValueCreator ) CompositeIdBinder compositeIdBinder = new CompositeIdBinder(metadataBuildingContext, componentPropertyBinder) PropertyBinder propertyBinderHelper = new PropertyBinder() @@ -109,21 +116,42 @@ class MapSecondPassBinderSpec extends HibernateGormDatastoreSpec { IdentityBinder identityBinder = new IdentityBinder(simpleIdBinder, compositeIdBinder) VersionBinder versionBinder = new VersionBinder(metadataBuildingContext, simpleValueBinder, propertyBinderHelper, BasicValue::new) + ClassBinder classBinder = new ClassBinder() + ClassPropertiesBinder classPropertiesBinder = new ClassPropertiesBinder(propertyBinder, propertyFromValueCreator) + MultiTenantFilterBinder multiTenantFilterBinder = new MultiTenantFilterBinder() + JoinedSubClassBinder joinedSubClassBinder = new JoinedSubClassBinder(metadataBuildingContext, namingStrategy, new org.grails.orm.hibernate.cfg.domainbinding.binder.SimpleValueColumnBinder(), columnNameForPropertyAndPathFetcher, classBinder) + UnionSubclassBinder unionSubclassBinder = new UnionSubclassBinder(metadataBuildingContext, namingStrategy, classBinder) + SingleTableSubclassBinder singleTableSubclassBinder = new SingleTableSubclassBinder(classBinder) + return [ propertyBinder: propertyBinder, collectionBinder: collectionBinder, identityBinder: identityBinder, versionBinder: versionBinder, defaultColumnNameFetcher: defaultColumnNameFetcher, - columnNameForPropertyAndPathFetcher: columnNameForPropertyAndPathFetcher + columnNameForPropertyAndPathFetcher: columnNameForPropertyAndPathFetcher, + classBinder: classBinder, + classPropertiesBinder: classPropertiesBinder, + multiTenantFilterBinder: multiTenantFilterBinder, + joinedSubClassBinder: joinedSubClassBinder, + unionSubclassBinder: unionSubclassBinder, + singleTableSubclassBinder: singleTableSubclassBinder ] } protected void bindRoot(GrailsDomainBinder binder, GrailsHibernatePersistentEntity entity, InFlightMetadataCollector mappings, String sessionFactoryBeanName) { def binders = getBinders(binder) - binder.bindRoot(entity, mappings, sessionFactoryBeanName, binders.defaultColumnNameFetcher, binders.columnNameForPropertyAndPathFetcher, binders.identityBinder as IdentityBinder, binders.versionBinder as VersionBinder, binders.propertyBinder as GrailsPropertyBinder, new ClassBinder(), new PropertyFromValueCreator()) + binder.bindRoot(entity, mappings, sessionFactoryBeanName, + binders.defaultColumnNameFetcher, + binders.identityBinder as IdentityBinder, + binders.versionBinder as VersionBinder, + binders.classBinder as ClassBinder, + binders.classPropertiesBinder as ClassPropertiesBinder, + binders.multiTenantFilterBinder as MultiTenantFilterBinder, + binders.joinedSubClassBinder as JoinedSubClassBinder, + binders.unionSubclassBinder as UnionSubclassBinder, + binders.singleTableSubclassBinder as SingleTableSubclassBinder) } - void setupSpec() { manager.addAllDomainClasses([ MapAuthorBinder, @@ -176,7 +204,7 @@ class MapSecondPassBinderSpec extends HibernateGormDatastoreSpec { map.setRole(authorEntity.name + ".books") // Initial first pass binding - collectionBinder.bindCollection(booksProp, map, rootClass, collector, "", "sessionFactory") + collectionBinder.bindCollection(booksProp, map, rootClass, collector, "") // Prepare persistentClasses map java.util.Map persistentClasses = [ @@ -185,8 +213,8 @@ class MapSecondPassBinderSpec extends HibernateGormDatastoreSpec { ] when: - collectionSecondPassBinder.bindCollectionSecondPass(booksProp, collector, persistentClasses, map, "sessionFactory") - mapSecondPassBinder.bindMapSecondPass(booksProp, collector, persistentClasses, map, "sessionFactory") + collectionSecondPassBinder.bindCollectionSecondPass(booksProp, collector, persistentClasses, map) + mapSecondPassBinder.bindMapSecondPass(booksProp, collector, persistentClasses, map) collector.processSecondPasses(binder.getMetadataBuildingContext()) then: diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ClassPropertiesBinderSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ClassPropertiesBinderSpec.groovy index c096318426..4d474be5bc 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ClassPropertiesBinderSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ClassPropertiesBinderSpec.groovy @@ -40,13 +40,13 @@ class ClassPropertiesBinderSpec extends HibernateGormDatastoreSpec { domainClass.getMappedForm() >> mapping when: - binder.bindClassProperties(domainClass, persistentClass, mappings, sessionFactoryBeanName) + binder.bindClassProperties(domainClass, persistentClass, mappings) then: - 1 * grailsPropertyBinder.bindProperty(persistentClass, prop1, mappings, sessionFactoryBeanName) >> value1 + 1 * grailsPropertyBinder.bindProperty(persistentClass, prop1, mappings) >> value1 1 * propertyFromValueCreator.createProperty(value1, prop1) >> hibernateProp1 - 1 * grailsPropertyBinder.bindProperty(persistentClass, prop2, mappings, sessionFactoryBeanName) >> value2 + 1 * grailsPropertyBinder.bindProperty(persistentClass, prop2, mappings) >> value2 1 * propertyFromValueCreator.createProperty(value2, prop2) >> hibernateProp2 persistentClass.getProperty("hibernateProp1") == hibernateProp1 diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/BagCollectionTypeSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/BagCollectionTypeSpec.groovy index 896f902052..3b35775d55 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/BagCollectionTypeSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/BagCollectionTypeSpec.groovy @@ -19,7 +19,7 @@ class BagCollectionTypeSpec extends HibernateGormDatastoreSpec { binder.getMetadataBuildingContext() >> metadataBuildingContext @Subject - def collectionType = new BagCollectionType(binder) + def collectionType = new BagCollectionType(metadataBuildingContext) def property = Mock(HibernateToManyProperty) def owner = new RootClass(metadataBuildingContext) diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/CollectionHolderSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/CollectionHolderSpec.groovy index 087e293940..ff9588cff5 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/CollectionHolderSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/CollectionHolderSpec.groovy @@ -10,7 +10,7 @@ class CollectionHolderSpec extends HibernateGormDatastoreSpec { CollectionHolder holder def setup() { - holder = new CollectionHolder(getGrailsDomainBinder()) + holder = new CollectionHolder(getGrailsDomainBinder().getMetadataBuildingContext()) } @Unroll diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/ListCollectionTypeSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/ListCollectionTypeSpec.groovy index 4fb8c273bd..a815c72a83 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/ListCollectionTypeSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/ListCollectionTypeSpec.groovy @@ -19,7 +19,7 @@ class ListCollectionTypeSpec extends HibernateGormDatastoreSpec { binder.getMetadataBuildingContext() >> metadataBuildingContext @Subject - def collectionType = new ListCollectionType(binder) + def collectionType = new ListCollectionType(metadataBuildingContext) def property = Mock(HibernateToManyProperty) def owner = new RootClass(metadataBuildingContext) diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/MapCollectionTypeSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/MapCollectionTypeSpec.groovy index 25e1370e68..c864d82811 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/MapCollectionTypeSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/MapCollectionTypeSpec.groovy @@ -19,7 +19,7 @@ class MapCollectionTypeSpec extends HibernateGormDatastoreSpec { binder.getMetadataBuildingContext() >> metadataBuildingContext @Subject - def collectionType = new MapCollectionType(binder) + def collectionType = new MapCollectionType(metadataBuildingContext) def property = Mock(HibernateToManyProperty) def owner = new RootClass(metadataBuildingContext) diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/SetCollectionTypeSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/SetCollectionTypeSpec.groovy index da83ce4375..c445afdecd 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/SetCollectionTypeSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/SetCollectionTypeSpec.groovy @@ -19,7 +19,7 @@ class SetCollectionTypeSpec extends HibernateGormDatastoreSpec { binder.getMetadataBuildingContext() >> metadataBuildingContext @Subject - def collectionType = new SetCollectionType(binder) + def collectionType = new SetCollectionType(metadataBuildingContext) def property = Mock(HibernateToManyProperty) def owner = new RootClass(metadataBuildingContext) diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/SortedSetCollectionTypeSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/SortedSetCollectionTypeSpec.groovy index fdaa39a226..95d2038524 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/SortedSetCollectionTypeSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/SortedSetCollectionTypeSpec.groovy @@ -19,7 +19,7 @@ class SortedSetCollectionTypeSpec extends HibernateGormDatastoreSpec { binder.getMetadataBuildingContext() >> metadataBuildingContext @Subject - def collectionType = new SortedSetCollectionType(binder) + def collectionType = new SortedSetCollectionType(metadataBuildingContext) def property = Mock(HibernateToManyProperty) def owner = new RootClass(metadataBuildingContext)
