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 b73f86852fc4cd6bbbeb0413927e7d5ef23117c4 Author: Walter Duque de Estrada <[email protected]> AuthorDate: Thu Feb 5 09:19:41 2026 -0600 GrailsHibernatePersistentProperty --- .../orm/hibernate/cfg/GrailsDomainBinder.java | 48 +++++++++++----------- .../hibernate/cfg/HibernateManyToManyProperty.java | 2 +- .../hibernate/cfg/HibernateManyToOneProperty.java | 2 +- .../hibernate/cfg/HibernateOneToManyProperty.java | 2 +- .../hibernate/cfg/HibernateOneToOneProperty.java | 2 +- .../orm/hibernate/cfg/HibernateToManyProperty.java | 34 +++++++++++++++ .../cfg/domainbinding/ComponentPropertyBinder.java | 4 +- .../cfg/domainbinding/GrailsPropertyBinder.java | 11 +++-- .../ShouldCollectionBindWithJoinColumn.java | 6 +-- .../cfg/domainbinding/TableForManyCalculator.java | 6 +-- .../collectionType/BagCollectionType.java | 4 +- .../collectionType/CollectionType.java | 8 ++-- .../collectionType/ListCollectionType.java | 4 +- .../collectionType/MapCollectionType.java | 4 +- .../collectionType/SetCollectionType.java | 4 +- .../collectionType/SortedSetCollectionType.java | 4 +- .../secondpass/GrailsCollectionSecondPass.java | 6 +-- .../domainbinding/secondpass/ListSecondPass.java | 4 +- .../domainbinding/secondpass/MapSecondPass.java | 4 +- 19 files changed, 95 insertions(+), 64 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 3eb64cb3da..68ed76ccc1 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 @@ -25,7 +25,6 @@ import org.grails.datastore.mapping.model.types.Association; import org.grails.datastore.mapping.model.types.Basic; import org.grails.datastore.mapping.model.types.ManyToMany; import org.grails.datastore.mapping.model.types.TenantId; -import org.grails.datastore.mapping.model.types.ToMany; import org.grails.orm.hibernate.cfg.domainbinding.ClassBinder; import org.grails.orm.hibernate.cfg.domainbinding.ColumnConfigToColumnBinder; import org.grails.orm.hibernate.cfg.domainbinding.EnumTypeBinder; @@ -128,7 +127,7 @@ public class GrailsDomainBinder private final CollectionType CT = new CollectionType(null, this) { @Override - public Collection create(ToMany property, PersistentClass owner, String path, InFlightMetadataCollector mappings, String sessionFactoryBeanName) { + public Collection create(HibernateToManyProperty property, PersistentClass owner, String path, InFlightMetadataCollector mappings, String sessionFactoryBeanName) { return null; } }; @@ -250,7 +249,7 @@ public class GrailsDomainBinder NAMING_STRATEGY_PROVIDER.configureNamingStrategy(datasourceName, strategy); } - public void bindMapSecondPass(ToMany property, @Nonnull InFlightMetadataCollector mappings, + public void bindMapSecondPass(HibernateToManyProperty property, @Nonnull InFlightMetadataCollector mappings, Map<?, ?> persistentClasses, org.hibernate.mapping.Map map, String sessionFactoryBeanName) { bindCollectionSecondPass(property, mappings, persistentClasses, map, sessionFactoryBeanName); @@ -259,7 +258,7 @@ public class GrailsDomainBinder String type = ((GrailsHibernatePersistentProperty) property).getIndexColumnType("string"); String columnName1 = getIndexColumnName(property, sessionFactoryBeanName); new SimpleValueColumnBinder().bindSimpleValue(value, type, columnName1, true); - PropertyConfig mappedForm = property instanceof GrailsHibernatePersistentProperty ghpp ? ghpp.getMappedForm() : new PropertyConfig(); + PropertyConfig mappedForm = property.getMappedForm(); if (mappedForm.getIndexColumn() != null) { Column column = new SimpleValueColumnFetcher().getColumnForSimpleValue(value); ColumnConfig columnConfig = getSingleColumnConfig(mappedForm.getIndexColumn()); @@ -281,7 +280,7 @@ public class GrailsDomainBinder if (domainClass != null) { mapping = domainClass.getMappedForm(); } - String typeName = property instanceof GrailsHibernatePersistentProperty ghpp ? ghpp.getTypeName() : null; + String typeName = property.getTypeName(); if (typeName == null ) { if(property instanceof Basic) { @@ -318,7 +317,7 @@ public class GrailsDomainBinder * @param list * @param sessionFactoryBeanName */ - public void bindListSecondPass(ToMany property, @Nonnull InFlightMetadataCollector mappings, + public void bindListSecondPass(HibernateToManyProperty property, @Nonnull InFlightMetadataCollector mappings, Map<?, ?> persistentClasses, org.hibernate.mapping.List list, String sessionFactoryBeanName) { bindCollectionSecondPass(property, mappings, persistentClasses, list, sessionFactoryBeanName); @@ -397,9 +396,8 @@ public class GrailsDomainBinder } } - public void bindCollectionSecondPass(ToMany property, @Nonnull InFlightMetadataCollector mappings, - Map<?, ?> persistentClasses, Collection collection, String sessionFactoryBeanName) { - PersistentClass associatedClass = null; + public void bindCollectionSecondPass(HibernateToManyProperty property, @Nonnull InFlightMetadataCollector mappings, + Map<?, ?> persistentClasses, Collection collection, String sessionFactoryBeanName) { PersistentClass associatedClass = null; if (LOG.isDebugEnabled()) LOG.debug("Mapping collection: " @@ -407,7 +405,7 @@ public class GrailsDomainBinder + " -> " + collection.getCollectionTable().getName()); - PropertyConfig propConfig = property instanceof GrailsHibernatePersistentProperty ghpp ? ghpp.getMappedForm() : new PropertyConfig(); + PropertyConfig propConfig = property.getMappedForm(); PersistentEntity referenced = property.getAssociatedEntity(); if (StringUtils.hasText(propConfig.getSort())) { @@ -718,7 +716,7 @@ public class GrailsDomainBinder return theSet; } - private void bindCollectionWithJoinTable(ToMany property, + private void bindCollectionWithJoinTable(HibernateToManyProperty property, @Nonnull InFlightMetadataCollector mappings, Collection collection, PropertyConfig config, String sessionFactoryBeanName) { // PhysicalNamingStrategy namingStrategy = getPhysicalNamingStrategy(sessionFactoryBeanName); @@ -761,7 +759,7 @@ public class GrailsDomainBinder if (domainClass != null) { mapping = domainClass.getMappedForm(); } - String typeName = property instanceof GrailsHibernatePersistentProperty ghpp ? ghpp.getTypeName() : null; + String typeName = property.getTypeName(); if (typeName == null) { Type type = mappings.getTypeConfiguration().getBasicTypeRegistry().getRegisteredType(className); if (type != null) { @@ -777,7 +775,7 @@ public class GrailsDomainBinder if (joinColumnMappingOptional.isPresent()) { Column column = new SimpleValueColumnFetcher().getColumnForSimpleValue(element); ColumnConfig columnConfig = joinColumnMappingOptional.get(); - final PropertyConfig mappedForm = property instanceof GrailsHibernatePersistentProperty ghpp ? ghpp.getMappedForm() : new PropertyConfig(); + final PropertyConfig mappedForm = property.getMappedForm(); new ColumnConfigToColumnBinder().bindColumnConfigToColumn(column, columnConfig, mappedForm); } } @@ -814,8 +812,8 @@ public class GrailsDomainBinder * @param property The property to bind * @param manyToOne The inverse side */ - private void bindUnidirectionalOneToManyInverseValues(ToMany property, ManyToOne manyToOne) { - PropertyConfig config = property instanceof GrailsHibernatePersistentProperty ghpp ? ghpp.getMappedForm() : new PropertyConfig(); + private void bindUnidirectionalOneToManyInverseValues(HibernateToManyProperty property, ManyToOne manyToOne) { + PropertyConfig config = property.getMappedForm(); manyToOne.setIgnoreNotFound(config.getIgnoreNotFound()); final FetchMode fetch = config.getFetchMode(); if(!fetch.equals(FetchMode.JOIN)) { @@ -852,7 +850,7 @@ public class GrailsDomainBinder mapping = persistentEntity.getMappedForm(); } boolean hasCompositeIdentifier = mapping != null && mapping.hasCompositeIdentifier(); - if ((new ShouldCollectionBindWithJoinColumn().apply((ToMany) property) && hasCompositeIdentifier) || + if ((new ShouldCollectionBindWithJoinColumn().apply((HibernateToManyProperty) property) && hasCompositeIdentifier) || (hasCompositeIdentifier && ( property instanceof ManyToMany))) { CompositeIdentity ci = (CompositeIdentity) mapping.getIdentity(); new CompositeIdentifierToManyToOneBinder(namingStrategy).bindCompositeIdentifierToManyToOne((GrailsHibernatePersistentProperty) property, key, ci, refDomainClass, EMPTY_PATH); @@ -1002,14 +1000,14 @@ public class GrailsDomainBinder * @param mappings The Hibernate mappings instance * @param path */ - public void bindCollection(ToMany property, Collection collection, + public void bindCollection(HibernateToManyProperty property, Collection collection, PersistentClass owner, @Nonnull InFlightMetadataCollector mappings, String path, String sessionFactoryBeanName) { // set role String propertyName = getNameForPropertyAndPath(property, path); collection.setRole(qualify(property.getOwner().getName(), propertyName)); - PropertyConfig pc = property instanceof GrailsHibernatePersistentProperty ghpp ? ghpp.getMappedForm() : new PropertyConfig(); + PropertyConfig pc = property.getMappedForm(); // configure eager fetching final FetchMode fetchMode = pc.getFetchMode(); if (fetchMode == FetchMode.JOIN) { @@ -1061,7 +1059,7 @@ public class GrailsDomainBinder * We bind collections with foreign keys if specified in the mapping and only if * it is a unidirectional one-to-many that is. */ - private boolean shouldBindCollectionWithForeignKey(ToMany property) { + private boolean shouldBindCollectionWithForeignKey(HibernateToManyProperty property) { return ((property instanceof org.grails.datastore.mapping.model.types.OneToMany) && property.isBidirectional() || !(boolean) new ShouldCollectionBindWithJoinColumn().apply(property)) && !Map.class.isAssignableFrom(property.getType()) && @@ -1076,11 +1074,11 @@ public class GrailsDomainBinder return property.getName(); } - private void bindCollectionTable(ToMany property, @Nonnull InFlightMetadataCollector mappings, + private void bindCollectionTable(HibernateToManyProperty property, @Nonnull InFlightMetadataCollector mappings, Collection collection, Table ownerTable, String sessionFactoryBeanName) { String owningTableSchema = ownerTable.getSchema(); - PropertyConfig config = property instanceof GrailsHibernatePersistentProperty ghpp ? ghpp.getMappedForm() : new PropertyConfig(); + PropertyConfig config = property.getMappedForm(); JoinTable jt = config.getJoinTable(); String s = new TableForManyCalculator(namingStrategy).calculateTableForMany(property, sessionFactoryBeanName); @@ -1607,12 +1605,12 @@ public class GrailsDomainBinder private static final long serialVersionUID = -5540526942092611348L; - ToMany property; + HibernateToManyProperty property; @Nonnull InFlightMetadataCollector mappings; Collection collection; String sessionFactoryBeanName; - public GrailsCollectionSecondPass(ToMany property, @Nonnull InFlightMetadataCollector mappings, + public GrailsCollectionSecondPass(HibernateToManyProperty property, @Nonnull InFlightMetadataCollector mappings, Collection coll, String sessionFactoryBeanName) { this.property = property; this.mappings = mappings; @@ -1663,7 +1661,7 @@ public class GrailsDomainBinder public class ListSecondPass extends GrailsCollectionSecondPass { private static final long serialVersionUID = -3024674993774205193L; - public ListSecondPass(ToMany property, @Nonnull InFlightMetadataCollector mappings, + public ListSecondPass(HibernateToManyProperty property, @Nonnull InFlightMetadataCollector mappings, Collection coll, String sessionFactoryBeanName) { super(property, mappings, coll, sessionFactoryBeanName); } @@ -1685,7 +1683,7 @@ public class GrailsDomainBinder public class MapSecondPass extends GrailsCollectionSecondPass { private static final long serialVersionUID = -3244991685626409031L; - public MapSecondPass(ToMany property, @Nonnull InFlightMetadataCollector mappings, + public MapSecondPass(HibernateToManyProperty property, @Nonnull InFlightMetadataCollector mappings, Collection coll, String sessionFactoryBeanName) { super(property, mappings, coll, sessionFactoryBeanName); } diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateManyToManyProperty.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateManyToManyProperty.java index 0d7a3e32a8..67ea10d0d2 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateManyToManyProperty.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateManyToManyProperty.java @@ -9,7 +9,7 @@ import java.beans.PropertyDescriptor; /** * Hibernate implementation of {@link org.grails.datastore.mapping.model.types.ManyToMany} */ -public class HibernateManyToManyProperty extends ManyToManyWithMapping<PropertyConfig> implements GrailsHibernatePersistentProperty { +public class HibernateManyToManyProperty extends ManyToManyWithMapping<PropertyConfig> implements HibernateToManyProperty { public HibernateManyToManyProperty(PersistentEntity entity, MappingContext context, PropertyDescriptor property) { super(entity, context, property); } diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateManyToOneProperty.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateManyToOneProperty.java index b357b02aff..21112df58a 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateManyToOneProperty.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateManyToOneProperty.java @@ -9,7 +9,7 @@ import java.beans.PropertyDescriptor; /** * Hibernate implementation of {@link org.grails.datastore.mapping.model.types.ManyToOne} */ -public class HibernateManyToOneProperty extends ManyToOneWithMapping<PropertyConfig> implements GrailsHibernatePersistentProperty { +public class HibernateManyToOneProperty extends ManyToOneWithMapping<PropertyConfig> implements HibernateToManyProperty { public HibernateManyToOneProperty(PersistentEntity entity, MappingContext context, PropertyDescriptor property) { super(entity, context, property); } diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateOneToManyProperty.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateOneToManyProperty.java index 65c01a6c92..186339b7e5 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateOneToManyProperty.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateOneToManyProperty.java @@ -9,7 +9,7 @@ import java.beans.PropertyDescriptor; /** * Hibernate implementation of {@link org.grails.datastore.mapping.model.types.OneToMany} */ -public class HibernateOneToManyProperty extends OneToManyWithMapping<PropertyConfig> implements GrailsHibernatePersistentProperty { +public class HibernateOneToManyProperty extends OneToManyWithMapping<PropertyConfig> implements HibernateToManyProperty { public HibernateOneToManyProperty(PersistentEntity entity, MappingContext context, PropertyDescriptor property) { super(entity, context, property); } diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateOneToOneProperty.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateOneToOneProperty.java index d8df3be439..7d77de6485 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateOneToOneProperty.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateOneToOneProperty.java @@ -9,7 +9,7 @@ import java.beans.PropertyDescriptor; /** * Hibernate implementation of {@link org.grails.datastore.mapping.model.types.OneToOne} */ -public class HibernateOneToOneProperty extends OneToOneWithMapping<PropertyConfig> implements GrailsHibernatePersistentProperty { +public class HibernateOneToOneProperty extends OneToOneWithMapping<PropertyConfig> implements HibernateToManyProperty { public HibernateOneToOneProperty(PersistentEntity entity, MappingContext context, PropertyDescriptor property) { super(entity, context, property); } diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateToManyProperty.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateToManyProperty.java new file mode 100644 index 0000000000..57fe8d2e76 --- /dev/null +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateToManyProperty.java @@ -0,0 +1,34 @@ +package org.grails.orm.hibernate.cfg; + +import org.grails.datastore.mapping.model.PersistentEntity; +import org.grails.datastore.mapping.model.types.Association; + +/** + * Marker interface for Hibernate associations + */ +public interface HibernateToManyProperty extends GrailsHibernatePersistentProperty { + + default boolean isOwningSide() { + return ((Association) this).isOwningSide(); + } + + default boolean isBidirectional() { + return ((Association) this).isBidirectional(); + } + + default Association getInverseSide() { + return ((Association) this).getInverseSide(); + } + + default boolean isCircular() { + return ((Association) this).isCircular(); + } + + default PersistentEntity getAssociatedEntity() { + return ((Association) this).getAssociatedEntity(); + } + + default boolean isBidirectionalOneToManyMap() { + return ((Association) this).isBidirectionalOneToManyMap(); + } +} diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/ComponentPropertyBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/ComponentPropertyBinder.java index ebdd1192e1..2a7fabda9c 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/ComponentPropertyBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/ComponentPropertyBinder.java @@ -26,10 +26,10 @@ 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.Embedded; -import org.grails.datastore.mapping.model.types.ToMany; import org.grails.orm.hibernate.cfg.GrailsHibernatePersistentEntity; import org.grails.orm.hibernate.cfg.GrailsHibernatePersistentProperty; import org.grails.orm.hibernate.cfg.GrailsHibernateUtil; +import org.grails.orm.hibernate.cfg.HibernateToManyProperty; import org.grails.orm.hibernate.cfg.Mapping; import org.grails.orm.hibernate.cfg.MappingCacheHolder; import org.grails.orm.hibernate.cfg.PersistentEntityNamingStrategy; @@ -97,7 +97,7 @@ public class ComponentPropertyBinder { CollectionType collectionType = collectionHolder.get(currentGrailsProp.getType()); if (collectionType != null) { // create collection - Collection collection = collectionType.create((ToMany) currentGrailsProp, persistentClass, + Collection collection = collectionType.create((HibernateToManyProperty) currentGrailsProp, persistentClass, path, mappings, sessionFactoryBeanName); mappings.addCollectionBinding(collection); value = collection; diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/GrailsPropertyBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/GrailsPropertyBinder.java index 93c4bb5e1f..93e98e38ec 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/GrailsPropertyBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/GrailsPropertyBinder.java @@ -3,8 +3,8 @@ package org.grails.orm.hibernate.cfg.domainbinding; import jakarta.annotation.Nonnull; import org.grails.datastore.mapping.model.types.Association; import org.grails.datastore.mapping.model.types.Embedded; -import org.grails.datastore.mapping.model.types.ToMany; import org.grails.orm.hibernate.cfg.GrailsHibernatePersistentProperty; +import org.grails.orm.hibernate.cfg.HibernateToManyProperty; import org.grails.orm.hibernate.cfg.Mapping; import org.grails.orm.hibernate.cfg.PersistentEntityNamingStrategy; import org.grails.orm.hibernate.cfg.domainbinding.collectionType.CollectionType; @@ -82,7 +82,7 @@ public class GrailsPropertyBinder { new SimpleValueBinder(namingStrategy).bindSimpleValue(currentGrailsProp, null,(SimpleValue) value, EMPTY_PATH);// No specific binder call needed } else { // Actual Collection - Collection collection = collectionType.create((ToMany) currentGrailsProp, persistentClass, + Collection collection = collectionType.create((HibernateToManyProperty) currentGrailsProp, persistentClass, EMPTY_PATH, mappings, sessionFactoryBeanName); mappings.addCollectionBinding(collection); value = collection; @@ -92,10 +92,9 @@ public class GrailsPropertyBinder { else if (currentGrailsProp.getType().isEnum()) { value = new BasicValue(metadataBuildingContext, table); // Apply enumTypeBinder if the created value is a SimpleValue - if (value instanceof SimpleValue simpleValue) { - String columnName = new ColumnNameForPropertyAndPathFetcher(namingStrategy).getColumnNameForPropertyAndPath(currentGrailsProp, EMPTY_PATH, null); - enumTypeBinder.bindEnumType(currentGrailsProp, currentGrailsProp.getType(), simpleValue, columnName); - } + SimpleValue simpleValue = (SimpleValue) value; + String columnName = new ColumnNameForPropertyAndPathFetcher(namingStrategy).getColumnNameForPropertyAndPath(currentGrailsProp, EMPTY_PATH, null); + enumTypeBinder.bindEnumType(currentGrailsProp, currentGrailsProp.getType(), simpleValue, columnName); } else if (currentGrailsProp.isHibernateOneToOne()) { value = new OneToOne(metadataBuildingContext, table, persistentClass); diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/ShouldCollectionBindWithJoinColumn.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/ShouldCollectionBindWithJoinColumn.java index 3b8a22244a..312a8b44b4 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/ShouldCollectionBindWithJoinColumn.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/ShouldCollectionBindWithJoinColumn.java @@ -4,14 +4,14 @@ import java.util.function.Function; import org.grails.datastore.mapping.model.PersistentProperty; import org.grails.datastore.mapping.model.types.Basic; -import org.grails.datastore.mapping.model.types.ToMany; +import org.grails.orm.hibernate.cfg.HibernateToManyProperty; import static java.util.Optional.ofNullable; -public class ShouldCollectionBindWithJoinColumn implements Function<ToMany,Boolean> { +public class ShouldCollectionBindWithJoinColumn implements Function<HibernateToManyProperty,Boolean> { @Override - public Boolean apply(ToMany property) { + public Boolean apply(HibernateToManyProperty property) { return (ofNullable(property).map(PersistentProperty::isUnidirectionalOneToMany).orElse(false) || (property instanceof Basic)); } } diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/TableForManyCalculator.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/TableForManyCalculator.java index 225465e1e2..d48696e96e 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/TableForManyCalculator.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/TableForManyCalculator.java @@ -7,8 +7,8 @@ import org.hibernate.MappingException; import org.grails.datastore.mapping.model.PersistentEntity; import org.grails.datastore.mapping.model.types.Basic; import org.grails.datastore.mapping.model.types.ManyToMany; -import org.grails.datastore.mapping.model.types.ToMany; import org.grails.orm.hibernate.cfg.GrailsHibernatePersistentProperty; +import org.grails.orm.hibernate.cfg.HibernateToManyProperty; import org.grails.orm.hibernate.cfg.JoinTable; import org.grails.orm.hibernate.cfg.PersistentEntityNamingStrategy; import org.grails.orm.hibernate.cfg.PropertyConfig; @@ -50,10 +50,10 @@ public class TableForManyCalculator { * the relationship has to "own" the relationship so that there is not a situation * where you have two mapping tables for left_right and right_left */ - public String calculateTableForMany(ToMany property, String sessionFactoryBeanName) { + public String calculateTableForMany(HibernateToManyProperty property, String sessionFactoryBeanName) { String propertyColumnName = namingStrategy.resolveColumnName(property.getName()); //fix for GRAILS-5895 - PropertyConfig config = ((GrailsHibernatePersistentProperty) property).getMappedForm(); + PropertyConfig config = property.getMappedForm(); JoinTable jt = config.getJoinTable(); boolean hasJoinTableMapping = jt != null && jt.getName() != null; PersistentEntity domainClass1 = property.getOwner(); diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/BagCollectionType.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/BagCollectionType.java index b72d23fcbb..3c3157a475 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/BagCollectionType.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/BagCollectionType.java @@ -8,8 +8,8 @@ import org.hibernate.mapping.PersistentClass; import jakarta.annotation.Nonnull; -import org.grails.datastore.mapping.model.types.ToMany; import org.grails.orm.hibernate.cfg.GrailsDomainBinder; +import org.grails.orm.hibernate.cfg.HibernateToManyProperty; public class BagCollectionType extends CollectionType { @@ -18,7 +18,7 @@ public class BagCollectionType extends CollectionType { } @Override - public Collection create(ToMany property, PersistentClass owner, + public Collection create(HibernateToManyProperty property, PersistentClass owner, String path, @Nonnull InFlightMetadataCollector mappings, String sessionFactoryBeanName) throws MappingException { Bag coll = new Bag(buildingContext, owner); coll.setCollectionTable(owner.getTable()); diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/CollectionType.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/CollectionType.java index cf36aaa4bb..1581586980 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/CollectionType.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/CollectionType.java @@ -15,10 +15,10 @@ import org.hibernate.mapping.PersistentClass; import jakarta.annotation.Nonnull; -import org.grails.datastore.mapping.model.types.ToMany; import org.grails.orm.hibernate.cfg.GrailsDomainBinder; import org.grails.orm.hibernate.cfg.GrailsHibernatePersistentEntity; import org.grails.orm.hibernate.cfg.GrailsHibernatePersistentProperty; +import org.grails.orm.hibernate.cfg.HibernateToManyProperty; import org.grails.orm.hibernate.cfg.Mapping; /** @@ -33,7 +33,7 @@ public abstract class CollectionType { protected final MetadataBuildingContext buildingContext; - public abstract Collection create(ToMany property, PersistentClass owner, + public abstract Collection create(HibernateToManyProperty property, PersistentClass owner, String path, @Nonnull InFlightMetadataCollector mappings, String sessionFactoryBeanName) throws MappingException; protected CollectionType(Class<?> clazz, GrailsDomainBinder binder) { @@ -49,8 +49,8 @@ public abstract class CollectionType { - public String getTypeName(ToMany<?> property) { - return property instanceof GrailsHibernatePersistentProperty ghpp ? ghpp.getTypeName() : null; + public String getTypeName(HibernateToManyProperty property) { + return property.getTypeName(); } } diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/ListCollectionType.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/ListCollectionType.java index 264765a48a..91467256b7 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/ListCollectionType.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/ListCollectionType.java @@ -9,8 +9,8 @@ import org.hibernate.mapping.PersistentClass; import jakarta.annotation.Nonnull; -import org.grails.datastore.mapping.model.types.ToMany; import org.grails.orm.hibernate.cfg.GrailsDomainBinder; +import org.grails.orm.hibernate.cfg.HibernateToManyProperty; public class ListCollectionType extends CollectionType { @@ -19,7 +19,7 @@ public class ListCollectionType extends CollectionType { } @Override - public Collection create(ToMany property, PersistentClass owner, + public Collection create(HibernateToManyProperty property, PersistentClass owner, String path, @Nonnull InFlightMetadataCollector mappings, String sessionFactoryBeanName) throws MappingException { org.hibernate.mapping.List coll = new org.hibernate.mapping.List(buildingContext, owner); coll.setCollectionTable(owner.getTable()); diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/MapCollectionType.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/MapCollectionType.java index cf98800c3b..c9e4f997dc 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/MapCollectionType.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/MapCollectionType.java @@ -9,8 +9,8 @@ import org.hibernate.mapping.PersistentClass; import jakarta.annotation.Nonnull; -import org.grails.datastore.mapping.model.types.ToMany; import org.grails.orm.hibernate.cfg.GrailsDomainBinder; +import org.grails.orm.hibernate.cfg.HibernateToManyProperty; public class MapCollectionType extends CollectionType { @@ -19,7 +19,7 @@ public class MapCollectionType extends CollectionType { } @Override - public Collection create(ToMany property, PersistentClass owner, + public Collection create(HibernateToManyProperty property, PersistentClass owner, String path, @Nonnull InFlightMetadataCollector mappings, String sessionFactoryBeanName) throws MappingException { org.hibernate.mapping.Map map = new org.hibernate.mapping.Map(buildingContext, owner); map.setTypeName(getTypeName(property)); diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/SetCollectionType.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/SetCollectionType.java index d85475af30..136fcf51e0 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/SetCollectionType.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/SetCollectionType.java @@ -9,8 +9,8 @@ import org.hibernate.mapping.PersistentClass; import jakarta.annotation.Nonnull; -import org.grails.datastore.mapping.model.types.ToMany; import org.grails.orm.hibernate.cfg.GrailsDomainBinder; +import org.grails.orm.hibernate.cfg.HibernateToManyProperty; public class SetCollectionType extends CollectionType { @@ -19,7 +19,7 @@ public class SetCollectionType extends CollectionType { } @Override - public Collection create(ToMany property, PersistentClass owner, + public Collection create(HibernateToManyProperty property, PersistentClass owner, String path, @Nonnull InFlightMetadataCollector mappings, String sessionFactoryBeanName) throws MappingException { org.hibernate.mapping.Set coll = new org.hibernate.mapping.Set(buildingContext, owner); coll.setCollectionTable(owner.getTable()); diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/SortedSetCollectionType.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/SortedSetCollectionType.java index 5098dd3ade..7456f2e3a8 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/SortedSetCollectionType.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/collectionType/SortedSetCollectionType.java @@ -10,8 +10,8 @@ import org.hibernate.mapping.PersistentClass; import jakarta.annotation.Nonnull; -import org.grails.datastore.mapping.model.types.ToMany; import org.grails.orm.hibernate.cfg.GrailsDomainBinder; +import org.grails.orm.hibernate.cfg.HibernateToManyProperty; public class SortedSetCollectionType extends CollectionType { @@ -20,7 +20,7 @@ public class SortedSetCollectionType extends CollectionType { } @Override - public Collection create(ToMany property, PersistentClass owner, + public Collection create(HibernateToManyProperty property, PersistentClass owner, String path, @Nonnull InFlightMetadataCollector mappings, String sessionFactoryBeanName) throws MappingException { org.hibernate.mapping.Set coll = new org.hibernate.mapping.Set(buildingContext, owner); coll.setCollectionTable(owner.getTable()); diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/GrailsCollectionSecondPass.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/GrailsCollectionSecondPass.java index dbd6cf8e85..21fe8f8d4d 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/GrailsCollectionSecondPass.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/GrailsCollectionSecondPass.java @@ -13,8 +13,8 @@ import org.hibernate.mapping.OneToMany; import org.hibernate.mapping.Selectable; import org.hibernate.mapping.Value; -import org.grails.datastore.mapping.model.types.ToMany; import org.grails.orm.hibernate.cfg.GrailsDomainBinder; +import org.grails.orm.hibernate.cfg.HibernateToManyProperty; /** * Second pass class for grails relationships. This is required as all @@ -28,13 +28,13 @@ public class GrailsCollectionSecondPass implements org.hibernate.boot.spi.Second private static final long serialVersionUID = -5540526942092611348L; protected final GrailsDomainBinder grailsDomainBinder; - ToMany property; + HibernateToManyProperty property; @Nonnull InFlightMetadataCollector mappings; Collection collection; String sessionFactoryBeanName; - public GrailsCollectionSecondPass(GrailsDomainBinder grailsDomainBinder, ToMany property, @Nonnull InFlightMetadataCollector mappings, + public GrailsCollectionSecondPass(GrailsDomainBinder grailsDomainBinder, HibernateToManyProperty property, @Nonnull InFlightMetadataCollector mappings, Collection coll, String sessionFactoryBeanName) { this.grailsDomainBinder = grailsDomainBinder; this.property = property; 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 35d89b5077..fcb12b9bfb 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 @@ -8,14 +8,14 @@ import org.hibernate.MappingException; import org.hibernate.boot.spi.InFlightMetadataCollector; import org.hibernate.mapping.Collection; -import org.grails.datastore.mapping.model.types.ToMany; import org.grails.orm.hibernate.cfg.GrailsDomainBinder; +import org.grails.orm.hibernate.cfg.HibernateToManyProperty; public class ListSecondPass extends GrailsCollectionSecondPass { private static final long serialVersionUID = -3024674993774205193L; - public ListSecondPass(GrailsDomainBinder grailsDomainBinder, ToMany property, @Nonnull InFlightMetadataCollector mappings, + public ListSecondPass(GrailsDomainBinder grailsDomainBinder, HibernateToManyProperty property, @Nonnull InFlightMetadataCollector mappings, Collection coll, String sessionFactoryBeanName) { super(grailsDomainBinder, property, mappings, coll, sessionFactoryBeanName); } 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 f99f7520bf..5680a5e66e 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 @@ -8,14 +8,14 @@ import org.hibernate.MappingException; import org.hibernate.boot.spi.InFlightMetadataCollector; import org.hibernate.mapping.Collection; -import org.grails.datastore.mapping.model.types.ToMany; import org.grails.orm.hibernate.cfg.GrailsDomainBinder; +import org.grails.orm.hibernate.cfg.HibernateToManyProperty; public class MapSecondPass extends GrailsCollectionSecondPass { private static final long serialVersionUID = -3244991685626409031L; - public MapSecondPass(GrailsDomainBinder grailsDomainBinder, ToMany property, @Nonnull InFlightMetadataCollector mappings, + public MapSecondPass(GrailsDomainBinder grailsDomainBinder, HibernateToManyProperty property, @Nonnull InFlightMetadataCollector mappings, Collection coll, String sessionFactoryBeanName) { super(grailsDomainBinder, property, mappings, coll, sessionFactoryBeanName); }
