You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@grails.apache.org by bo...@apache.org on 2026/02/19 21:54:23 UTC
(grails-core) 20/25: Refactor GrailsDomainBinder.bindSubClass into SubClassBinder and add spec
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 84804ede7fc8287af44c30e94d45f82caf5c3a20
Author: Walter Duque de Estrada <wb...@mac.com>
AuthorDate: Thu Feb 19 12:54:09 2026 -0600
Refactor GrailsDomainBinder.bindSubClass into SubClassBinder and add spec
---
.../domainbinding/binder/GrailsDomainBinder.java | 47 ++--------
.../cfg/domainbinding/binder/SubClassBinder.java | 65 ++++++++++++++
.../cfg/domainbinding/CollectionBinderSpec.groovy | 12 ++-
.../domainbinding/GrailsPropertyBinderSpec.groovy | 12 ++-
.../domainbinding/binder/SubClassBinderSpec.groovy | 99 ++++++++++++++++++++++
.../secondpass/ListSecondPassBinderSpec.groovy | 12 ++-
.../secondpass/MapSecondPassBinderSpec.groovy | 12 ++-
7 files changed, 202 insertions(+), 57 deletions(-)
diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/GrailsDomainBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/GrailsDomainBinder.java
index 1943517cf5..6c71c38f8b 100644
--- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/GrailsDomainBinder.java
+++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/GrailsDomainBinder.java
@@ -209,11 +209,14 @@ public class GrailsDomainBinder
UnionSubclassBinder unionSubclassBinder = new UnionSubclassBinder(metadataBuildingContext, namingStrategy, classBinder);
SingleTableSubclassBinder singleTableSubclassBinder = new SingleTableSubclassBinder(classBinder);
+ SubclassMappingBinder subclassMappingBinder = new SubclassMappingBinder(metadataBuildingContext, joinedSubClassBinder, unionSubclassBinder, singleTableSubclassBinder, classPropertiesBinder);
+ SubClassBinder subClassBinder = new SubClassBinder(mappingCacheHolder, subclassMappingBinder, multiTenantFilterBinder, defaultColumnNameFetcher, dataSourceName);
+
hibernateMappingContext
.getHibernatePersistentEntities(dataSourceName)
.stream()
.filter(persistentEntity -> persistentEntity.forGrailsDomainMapping(dataSourceName))
- .forEach(hibernatePersistentEntity -> bindRoot(hibernatePersistentEntity, metadataCollector, defaultColumnNameFetcher, identityBinder, versionBinder, classBinder, classPropertiesBinder, multiTenantFilterBinder, joinedSubClassBinder, unionSubclassBinder, singleTableSubclassBinder));
+ .forEach(hibernatePersistentEntity -> bindRoot(hibernatePersistentEntity, metadataCollector, defaultColumnNameFetcher, identityBinder, versionBinder, classBinder, classPropertiesBinder, multiTenantFilterBinder, subClassBinder));
}
@@ -242,9 +245,8 @@ public class GrailsDomainBinder
*
* @param entity The Grails domain class
* @param mappings The Hibernate Mappings object
- * @param sessionFactoryBeanName the session factory bean name
*/
- protected void bindRoot(@Nonnull GrailsHibernatePersistentEntity entity,@Nonnull InFlightMetadataCollector mappings, DefaultColumnNameFetcher defaultColumnNameFetcher, IdentityBinder identityBinder, VersionBinder versionBinder, ClassBinder classBinder, ClassPropertiesBinder classPropertiesBinder, MultiTenantFilterBinder multiTenantFilterBinder, JoinedSubClassBinder joinedSubClassBinder, UnionSubclassBinder unionSubclassBinder, SingleTableSubclassBinder singleTableSubclassBinder) {
+ protected void bindRoot(@Nonnull GrailsHibernatePersistentEntity entity,@Nonnull InFlightMetadataCollector mappings, DefaultColumnNameFetcher defaultColumnNameFetcher, IdentityBinder identityBinder, VersionBinder versionBinder, ClassBinder classBinder, ClassPropertiesBinder classPropertiesBinder, MultiTenantFilterBinder multiTenantFilterBinder, SubClassBinder subClassBinder) {
if (mappings.getEntityBinding(entity.getName()) != null) {
LOG.info("[GrailsDomainBinder] Class [" + entity.getName() + "] is already mapped, skipping.. ");
return;
@@ -259,7 +261,7 @@ public class GrailsDomainBinder
discriminatorPropertyBinder.bindDiscriminatorProperty(root, m);
}
// bind the sub classes
- children.forEach(sub -> bindSubClass(sub, root, mappings, finalMapping,mappingCacheHolder, defaultColumnNameFetcher, classBinder, classPropertiesBinder, multiTenantFilterBinder, joinedSubClassBinder, unionSubclassBinder, singleTableSubclassBinder));
+ children.forEach(sub -> subClassBinder.bindSubClass(sub, root, mappings, finalMapping));
multiTenantFilterBinder.addMultiTenantFilterIfNecessary(entity, root, mappings, defaultColumnNameFetcher);
@@ -275,43 +277,6 @@ public class GrailsDomainBinder
return namingStrategy;
}
- /**
- * Binds a sub class.
- *
- * @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,
- Mapping m, MappingCacheHolder mappingCacheHolder, DefaultColumnNameFetcher defaultColumnNameFetcher, ClassBinder classBinder, ClassPropertiesBinder classPropertiesBinder, MultiTenantFilterBinder multiTenantFilterBinder, JoinedSubClassBinder joinedSubClassBinder, UnionSubclassBinder unionSubclassBinder, SingleTableSubclassBinder singleTableSubclassBinder) {
- mappingCacheHolder.cacheMapping(sub);
- SubclassMappingBinder subclassMappingBinder = new SubclassMappingBinder(metadataBuildingContext, joinedSubClassBinder, unionSubclassBinder, singleTableSubclassBinder, classPropertiesBinder);
- Subclass subClass = subclassMappingBinder.createSubclassMapping(sub, parent, mappings, m);
-
-
- parent.addSubclass(subClass);
- mappings.addEntityBinding(subClass);
-
- multiTenantFilterBinder.addMultiTenantFilterIfNecessary(sub, subClass, mappings, defaultColumnNameFetcher);
-
- var children = sub.getChildEntities(dataSourceName);
- if (!children.isEmpty()) {
- // bind the sub classes
- children.forEach(sub1 -> bindSubClass(sub1, subClass, mappings, m,mappingCacheHolder, defaultColumnNameFetcher, classBinder, classPropertiesBinder, multiTenantFilterBinder, joinedSubClassBinder, unionSubclassBinder, singleTableSubclassBinder ));
- }
- }
-
-
- /**
- * Binds a sub-class using table-per-hierarchy inheritance mapping
- *
- * @param sub The Grails domain class instance representing the sub-class
- * @param subClass The Hibernate SubClass instance
- * @param mappings The mappings instance
- */
public MetadataBuildingContext getMetadataBuildingContext() {
return metadataBuildingContext;
}
diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SubClassBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SubClassBinder.java
new file mode 100644
index 0000000000..6eae67b676
--- /dev/null
+++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SubClassBinder.java
@@ -0,0 +1,65 @@
+package org.grails.orm.hibernate.cfg.domainbinding.binder;
+
+import jakarta.annotation.Nonnull;
+import org.grails.orm.hibernate.cfg.Mapping;
+import org.grails.orm.hibernate.cfg.MappingCacheHolder;
+import org.grails.orm.hibernate.cfg.domainbinding.hibernate.GrailsHibernatePersistentEntity;
+import org.grails.orm.hibernate.cfg.domainbinding.util.DefaultColumnNameFetcher;
+import org.grails.orm.hibernate.cfg.domainbinding.util.MultiTenantFilterBinder;
+import org.hibernate.boot.spi.InFlightMetadataCollector;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.mapping.Subclass;
+
+import java.util.Collection;
+
+/**
+ * Binder for subclasses.
+ */
+public class SubClassBinder {
+
+ private final MappingCacheHolder mappingCacheHolder;
+ private final SubclassMappingBinder subclassMappingBinder;
+ private final MultiTenantFilterBinder multiTenantFilterBinder;
+ private final DefaultColumnNameFetcher defaultColumnNameFetcher;
+ private final String dataSourceName;
+
+ public SubClassBinder(
+ MappingCacheHolder mappingCacheHolder,
+ SubclassMappingBinder subclassMappingBinder,
+ MultiTenantFilterBinder multiTenantFilterBinder,
+ DefaultColumnNameFetcher defaultColumnNameFetcher,
+ String dataSourceName) {
+ this.mappingCacheHolder = mappingCacheHolder;
+ this.subclassMappingBinder = subclassMappingBinder;
+ this.multiTenantFilterBinder = multiTenantFilterBinder;
+ this.defaultColumnNameFetcher = defaultColumnNameFetcher;
+ this.dataSourceName = dataSourceName;
+ }
+
+ /**
+ * Binds a sub class.
+ *
+ * @param sub The sub domain class instance
+ * @param parent The parent persistent class instance
+ * @param mappings The mappings instance
+ * @param m The mapping config
+ */
+ public void bindSubClass(@Nonnull GrailsHibernatePersistentEntity sub,
+ PersistentClass parent,
+ @Nonnull InFlightMetadataCollector mappings,
+ Mapping m) {
+ mappingCacheHolder.cacheMapping(sub);
+ Subclass subClass = subclassMappingBinder.createSubclassMapping(sub, parent, mappings, m);
+
+ parent.addSubclass(subClass);
+ mappings.addEntityBinding(subClass);
+
+ multiTenantFilterBinder.addMultiTenantFilterIfNecessary(sub, subClass, mappings, defaultColumnNameFetcher);
+
+ Collection<GrailsHibernatePersistentEntity> children = sub.getChildEntities(dataSourceName);
+ if (!children.isEmpty()) {
+ // bind the sub classes
+ children.forEach(sub1 -> bindSubClass(sub1, subClass, mappings, m));
+ }
+ }
+}
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 090fd9e286..5eb1164955 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
@@ -18,6 +18,8 @@ import org.grails.orm.hibernate.cfg.domainbinding.binder.CollectionBinder
import org.grails.orm.hibernate.cfg.domainbinding.binder.ClassBinder
import org.grails.orm.hibernate.cfg.domainbinding.binder.OneToOneBinder
import org.grails.orm.hibernate.cfg.domainbinding.binder.GrailsDomainBinder
+import org.grails.orm.hibernate.cfg.domainbinding.binder.SubClassBinder
+import org.grails.orm.hibernate.cfg.domainbinding.binder.SubclassMappingBinder
import org.grails.orm.hibernate.cfg.domainbinding.binder.GrailsPropertyBinder
import org.grails.orm.hibernate.cfg.domainbinding.binder.IdentityBinder
@@ -117,6 +119,9 @@ class CollectionBinderSpec extends HibernateGormDatastoreSpec {
UnionSubclassBinder unionSubclassBinder = new UnionSubclassBinder(metadataBuildingContext, namingStrategy, classBinder)
SingleTableSubclassBinder singleTableSubclassBinder = new SingleTableSubclassBinder(classBinder)
+ SubclassMappingBinder subclassMappingBinder = new SubclassMappingBinder(metadataBuildingContext, joinedSubClassBinder, unionSubclassBinder, singleTableSubclassBinder, classPropertiesBinder)
+ SubClassBinder subClassBinder = new SubClassBinder(binder.getMappingCacheHolder(), subclassMappingBinder, multiTenantFilterBinder, defaultColumnNameFetcher, "dataSource")
+
return [
propertyBinder: propertyBinder,
collectionBinder: collectionBinder,
@@ -129,7 +134,8 @@ class CollectionBinderSpec extends HibernateGormDatastoreSpec {
multiTenantFilterBinder: multiTenantFilterBinder,
joinedSubClassBinder: joinedSubClassBinder,
unionSubclassBinder: unionSubclassBinder,
- singleTableSubclassBinder: singleTableSubclassBinder
+ singleTableSubclassBinder: singleTableSubclassBinder,
+ subClassBinder: subClassBinder
]
}
@@ -142,9 +148,7 @@ class CollectionBinderSpec extends HibernateGormDatastoreSpec {
binders.classBinder as ClassBinder,
binders.classPropertiesBinder as ClassPropertiesBinder,
binders.multiTenantFilterBinder as MultiTenantFilterBinder,
- binders.joinedSubClassBinder as JoinedSubClassBinder,
- binders.unionSubclassBinder as UnionSubclassBinder,
- binders.singleTableSubclassBinder as SingleTableSubclassBinder)
+ binders.subClassBinder as SubClassBinder)
}
void setupSpec() {
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 299a32c857..9651232933 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
@@ -28,6 +28,8 @@ import org.grails.orm.hibernate.cfg.domainbinding.binder.GrailsPropertyBinder
import org.grails.orm.hibernate.cfg.domainbinding.binder.ManyToOneBinder
import org.grails.orm.hibernate.cfg.domainbinding.binder.OneToOneBinder
import org.grails.orm.hibernate.cfg.domainbinding.binder.SimpleValueBinder
+import org.grails.orm.hibernate.cfg.domainbinding.binder.SubClassBinder
+import org.grails.orm.hibernate.cfg.domainbinding.binder.SubclassMappingBinder
import org.grails.orm.hibernate.cfg.domainbinding.util.BackticksRemover
import org.grails.orm.hibernate.cfg.domainbinding.util.ColumnNameForPropertyAndPathFetcher
import org.grails.orm.hibernate.cfg.domainbinding.collectionType.CollectionHolder
@@ -177,6 +179,9 @@ class GrailsPropertyBinderSpec extends HibernateGormDatastoreSpec {
UnionSubclassBinder unionSubclassBinder = new UnionSubclassBinder(metadataBuildingContext, namingStrategy, classBinder)
SingleTableSubclassBinder singleTableSubclassBinder = new SingleTableSubclassBinder(classBinder)
+ SubclassMappingBinder subclassMappingBinder = new SubclassMappingBinder(metadataBuildingContext, joinedSubClassBinder, unionSubclassBinder, singleTableSubclassBinder, classPropertiesBinder)
+ SubClassBinder subClassBinder = new SubClassBinder(binder.getMappingCacheHolder(), subclassMappingBinder, multiTenantFilterBinder, defaultColumnNameFetcher, "dataSource")
+
return [
propertyBinder: propertyBinder,
collectionBinder: collectionBinder,
@@ -190,7 +195,8 @@ class GrailsPropertyBinderSpec extends HibernateGormDatastoreSpec {
naturalIdentifierBinder: naturalIdentifierBinder,
joinedSubClassBinder: joinedSubClassBinder,
unionSubclassBinder: unionSubclassBinder,
- singleTableSubclassBinder: singleTableSubclassBinder
+ singleTableSubclassBinder: singleTableSubclassBinder,
+ subClassBinder: subClassBinder
]
}
@@ -203,9 +209,7 @@ class GrailsPropertyBinderSpec extends HibernateGormDatastoreSpec {
binders.classBinder as ClassBinder,
binders.classPropertiesBinder as ClassPropertiesBinder,
binders.multiTenantFilterBinder as MultiTenantFilterBinder,
- binders.joinedSubClassBinder as JoinedSubClassBinder,
- binders.unionSubclassBinder as UnionSubclassBinder,
- binders.singleTableSubclassBinder as SingleTableSubclassBinder)
+ binders.subClassBinder as SubClassBinder)
}
void setupSpec() {
manager.addAllDomainClasses([
diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SubClassBinderSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SubClassBinderSpec.groovy
new file mode 100644
index 0000000000..72646b2c22
--- /dev/null
+++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/SubClassBinderSpec.groovy
@@ -0,0 +1,99 @@
+package org.grails.orm.hibernate.cfg.domainbinding.binder
+
+import grails.gorm.annotation.Entity
+import grails.gorm.specs.HibernateGormDatastoreSpec
+import org.grails.orm.hibernate.cfg.Mapping
+import org.grails.orm.hibernate.cfg.MappingCacheHolder
+import org.grails.orm.hibernate.cfg.domainbinding.hibernate.GrailsHibernatePersistentEntity
+import org.grails.orm.hibernate.cfg.domainbinding.util.DefaultColumnNameFetcher
+import org.grails.orm.hibernate.cfg.domainbinding.util.MultiTenantFilterBinder
+import org.hibernate.boot.spi.MetadataBuildingContext
+import org.hibernate.mapping.PersistentClass
+import org.hibernate.mapping.RootClass
+import org.hibernate.mapping.Subclass
+import spock.lang.Shared
+
+class SubClassBinderSpec extends HibernateGormDatastoreSpec {
+
+ SubClassBinder binder
+ SubclassMappingBinder subclassMappingBinder
+ MultiTenantFilterBinder multiTenantFilterBinder
+ DefaultColumnNameFetcher defaultColumnNameFetcher
+ MappingCacheHolder mappingCacheHolder
+ MetadataBuildingContext metadataBuildingContext
+
+ void setup() {
+ def gdb = getGrailsDomainBinder()
+
+ metadataBuildingContext = gdb.getMetadataBuildingContext()
+ mappingCacheHolder = gdb.getMappingCacheHolder()
+ subclassMappingBinder = Mock(SubclassMappingBinder)
+ multiTenantFilterBinder = Mock(MultiTenantFilterBinder)
+ defaultColumnNameFetcher = Mock(DefaultColumnNameFetcher)
+
+ binder = new SubClassBinder(
+ mappingCacheHolder,
+ subclassMappingBinder,
+ multiTenantFilterBinder,
+ defaultColumnNameFetcher,
+ "default"
+ )
+ }
+
+ def "test bindSubClass with no children"() {
+ given:
+ def subEntity = Mock(GrailsHibernatePersistentEntity)
+ subEntity.getName() >> "Child"
+ subEntity.getChildEntities("default") >> []
+ def rootClass = new RootClass(metadataBuildingContext)
+ rootClass.setEntityName("Parent")
+ rootClass.setJpaEntityName("Parent")
+ def mappings = getCollector()
+ def mapping = new Mapping()
+ def subClass = new org.hibernate.mapping.SingleTableSubclass(rootClass, metadataBuildingContext)
+ subClass.setEntityName("Child")
+ subClass.setJpaEntityName("Child")
+
+ when:
+ binder.bindSubClass(subEntity, rootClass, mappings, mapping)
+
+ then:
+ 1 * subclassMappingBinder.createSubclassMapping(subEntity, rootClass, mappings, mapping) >> subClass
+ 1 * multiTenantFilterBinder.addMultiTenantFilterIfNecessary(subEntity, subClass, mappings, defaultColumnNameFetcher)
+ rootClass.getSubclasses().contains(subClass)
+ mappings.getEntityBinding(subClass.getEntityName()) == subClass
+ }
+
+ def "test bindSubClass with children"() {
+ given:
+ def subEntity = Mock(GrailsHibernatePersistentEntity)
+ def grandChildEntity = Mock(GrailsHibernatePersistentEntity)
+ subEntity.getName() >> "Child"
+ grandChildEntity.getName() >> "GrandChild"
+ subEntity.getChildEntities("default") >> [grandChildEntity]
+ grandChildEntity.getChildEntities("default") >> []
+
+ def rootClass = new RootClass(metadataBuildingContext)
+ rootClass.setEntityName("Parent")
+ rootClass.setJpaEntityName("Parent")
+ def mappings = getCollector()
+ def mapping = new Mapping()
+
+ def subClass = new org.hibernate.mapping.SingleTableSubclass(rootClass, metadataBuildingContext)
+ subClass.setEntityName("Child")
+ subClass.setJpaEntityName("Child")
+ def grandChildSubClass = new org.hibernate.mapping.SingleTableSubclass(subClass, metadataBuildingContext)
+ grandChildSubClass.setEntityName("GrandChild")
+ grandChildSubClass.setJpaEntityName("GrandChild")
+
+ when:
+ binder.bindSubClass(subEntity, rootClass, mappings, mapping)
+
+ then:
+ 1 * subclassMappingBinder.createSubclassMapping(subEntity, rootClass, mappings, mapping) >> subClass
+ 1 * subclassMappingBinder.createSubclassMapping(grandChildEntity, subClass, mappings, mapping) >> grandChildSubClass
+ 2 * multiTenantFilterBinder.addMultiTenantFilterIfNecessary(_, _, mappings, defaultColumnNameFetcher)
+ rootClass.getSubclasses().contains(subClass)
+ subClass.getSubclasses().contains(grandChildSubClass)
+ }
+}
diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/ListSecondPassBinderSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/ListSecondPassBinderSpec.groovy
index 7aea0465ee..e109677df0 100644
--- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/ListSecondPassBinderSpec.groovy
+++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/ListSecondPassBinderSpec.groovy
@@ -34,6 +34,8 @@ import org.grails.orm.hibernate.cfg.domainbinding.util.ColumnNameForPropertyAndP
import org.grails.orm.hibernate.cfg.domainbinding.collectionType.CollectionHolder
import org.grails.orm.hibernate.cfg.domainbinding.util.PropertyFromValueCreator
import org.grails.orm.hibernate.cfg.domainbinding.binder.GrailsDomainBinder
+import org.grails.orm.hibernate.cfg.domainbinding.binder.SubClassBinder
+import org.grails.orm.hibernate.cfg.domainbinding.binder.SubclassMappingBinder
import org.grails.orm.hibernate.cfg.domainbinding.binder.ClassPropertiesBinder
import org.grails.orm.hibernate.cfg.domainbinding.util.MultiTenantFilterBinder
@@ -116,6 +118,9 @@ class ListSecondPassBinderSpec extends HibernateGormDatastoreSpec {
UnionSubclassBinder unionSubclassBinder = new UnionSubclassBinder(metadataBuildingContext, namingStrategy, classBinder)
SingleTableSubclassBinder singleTableSubclassBinder = new SingleTableSubclassBinder(classBinder)
+ SubclassMappingBinder subclassMappingBinder = new SubclassMappingBinder(metadataBuildingContext, joinedSubClassBinder, unionSubclassBinder, singleTableSubclassBinder, classPropertiesBinder)
+ SubClassBinder subClassBinder = new SubClassBinder(binder.getMappingCacheHolder(), subclassMappingBinder, multiTenantFilterBinder, defaultColumnNameFetcher, "dataSource")
+
return [
propertyBinder: propertyBinder,
collectionBinder: collectionBinder,
@@ -128,7 +133,8 @@ class ListSecondPassBinderSpec extends HibernateGormDatastoreSpec {
multiTenantFilterBinder: multiTenantFilterBinder,
joinedSubClassBinder: joinedSubClassBinder,
unionSubclassBinder: unionSubclassBinder,
- singleTableSubclassBinder: singleTableSubclassBinder
+ singleTableSubclassBinder: singleTableSubclassBinder,
+ subClassBinder: subClassBinder
]
}
@@ -141,9 +147,7 @@ class ListSecondPassBinderSpec extends HibernateGormDatastoreSpec {
binders.classBinder as ClassBinder,
binders.classPropertiesBinder as ClassPropertiesBinder,
binders.multiTenantFilterBinder as MultiTenantFilterBinder,
- binders.joinedSubClassBinder as JoinedSubClassBinder,
- binders.unionSubclassBinder as UnionSubclassBinder,
- binders.singleTableSubclassBinder as SingleTableSubclassBinder)
+ binders.subClassBinder as SubClassBinder)
}
void setupSpec() {
diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/MapSecondPassBinderSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/MapSecondPassBinderSpec.groovy
index 3a0ec3fde4..05035d071d 100644
--- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/MapSecondPassBinderSpec.groovy
+++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/MapSecondPassBinderSpec.groovy
@@ -34,6 +34,8 @@ import org.grails.orm.hibernate.cfg.domainbinding.util.ColumnNameForPropertyAndP
import org.grails.orm.hibernate.cfg.domainbinding.collectionType.CollectionHolder
import org.grails.orm.hibernate.cfg.domainbinding.util.PropertyFromValueCreator
import org.grails.orm.hibernate.cfg.domainbinding.binder.GrailsDomainBinder
+import org.grails.orm.hibernate.cfg.domainbinding.binder.SubClassBinder
+import org.grails.orm.hibernate.cfg.domainbinding.binder.SubclassMappingBinder
import org.grails.orm.hibernate.cfg.domainbinding.binder.ClassPropertiesBinder
import org.grails.orm.hibernate.cfg.domainbinding.util.MultiTenantFilterBinder
@@ -116,6 +118,9 @@ class MapSecondPassBinderSpec extends HibernateGormDatastoreSpec {
UnionSubclassBinder unionSubclassBinder = new UnionSubclassBinder(metadataBuildingContext, namingStrategy, classBinder)
SingleTableSubclassBinder singleTableSubclassBinder = new SingleTableSubclassBinder(classBinder)
+ SubclassMappingBinder subclassMappingBinder = new SubclassMappingBinder(metadataBuildingContext, joinedSubClassBinder, unionSubclassBinder, singleTableSubclassBinder, classPropertiesBinder)
+ SubClassBinder subClassBinder = new SubClassBinder(binder.getMappingCacheHolder(), subclassMappingBinder, multiTenantFilterBinder, defaultColumnNameFetcher, "dataSource")
+
return [
propertyBinder: propertyBinder,
collectionBinder: collectionBinder,
@@ -128,7 +133,8 @@ class MapSecondPassBinderSpec extends HibernateGormDatastoreSpec {
multiTenantFilterBinder: multiTenantFilterBinder,
joinedSubClassBinder: joinedSubClassBinder,
unionSubclassBinder: unionSubclassBinder,
- singleTableSubclassBinder: singleTableSubclassBinder
+ singleTableSubclassBinder: singleTableSubclassBinder,
+ subClassBinder: subClassBinder
]
}
@@ -141,9 +147,7 @@ class MapSecondPassBinderSpec extends HibernateGormDatastoreSpec {
binders.classBinder as ClassBinder,
binders.classPropertiesBinder as ClassPropertiesBinder,
binders.multiTenantFilterBinder as MultiTenantFilterBinder,
- binders.joinedSubClassBinder as JoinedSubClassBinder,
- binders.unionSubclassBinder as UnionSubclassBinder,
- binders.singleTableSubclassBinder as SingleTableSubclassBinder)
+ binders.subClassBinder as SubClassBinder)
}
void setupSpec() {