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 e20c284d60cc3c112d94d2cfa9d9ca7db6ca524e Author: Walter Duque de Estrada <[email protected]> AuthorDate: Tue Feb 24 18:54:39 2026 -0600 Adding HibernateAssociation --- .../orm/hibernate/cfg/GrailsHibernateUtil.java | 24 +-------- .../access/TraitPropertyAccessStrategy.java | 2 +- .../domainbinding/binder/GrailsPropertyBinder.java | 6 +-- .../cfg/domainbinding/binder/ManyToOneBinder.java | 28 +++++------ .../binder/ManyToOneValuesBinder.java | 7 ++- .../GrailsHibernatePersistentProperty.java | 4 +- .../hibernate/HibernateAssociation.java | 57 ++++++++++++++++++++++ .../hibernate/HibernateManyToOneProperty.java | 2 +- .../hibernate/HibernateOneToOneProperty.java | 2 +- .../hibernate/HibernateToManyProperty.java | 2 +- ...neProperty.java => HibernateToOneProperty.java} | 24 ++------- .../secondpass/CollectionSecondPassBinder.java | 3 +- .../cfg/domainbinding/ManyToOneBinderSpec.groovy | 28 ++++++----- .../domainbinding/ManyToOneValuesBinderSpec.groovy | 9 ++-- .../model/types/mapping/ManyToManyWithMapping.java | 4 -- 15 files changed, 109 insertions(+), 93 deletions(-) diff --git a/grails-data-hibernate5/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsHibernateUtil.java b/grails-data-hibernate5/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsHibernateUtil.java index 4ddea5c68d..cd4d9abb75 100644 --- a/grails-data-hibernate5/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsHibernateUtil.java +++ b/grails-data-hibernate5/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsHibernateUtil.java @@ -18,7 +18,6 @@ */ package org.grails.orm.hibernate.cfg; -import java.util.List; import java.util.Map; import groovy.lang.GroovyObject; @@ -51,7 +50,6 @@ import org.grails.datastore.mapping.model.types.Association; import org.grails.datastore.mapping.model.types.Embedded; import org.grails.datastore.mapping.reflect.ClassUtils; import org.grails.orm.hibernate.AbstractHibernateDatastore; -import org.grails.orm.hibernate.datasource.MultipleDataSourceSupport; import org.grails.orm.hibernate.proxy.HibernateProxyHandler; import org.grails.orm.hibernate.support.HibernateRuntimeUtils; @@ -422,29 +420,9 @@ public class GrailsHibernateUtil extends HibernateRuntimeUtils { return proxyHandler.unwrap(instance); } - /** - * @deprecated Use {@link MultipleDataSourceSupport#getDefaultDataSource(PersistentEntity)} instead - */ - @Deprecated - public static String getDefaultDataSource(PersistentEntity domainClass) { - return MultipleDataSourceSupport.getDefaultDataSource(domainClass); - } - /** - * @deprecated Use {@link MultipleDataSourceSupport#getDatasourceNames(PersistentEntity)} instead - */ - @Deprecated - public static List<String> getDatasourceNames(PersistentEntity domainClass) { - return MultipleDataSourceSupport.getDatasourceNames(domainClass); - } - /** - * @deprecated Use {@link MultipleDataSourceSupport#getDefaultDataSource(PersistentEntity)} instead - */ - @Deprecated - public static boolean usesDatasource(PersistentEntity domainClass, String dataSourceName) { - return MultipleDataSourceSupport.usesDatasource(domainClass, dataSourceName); - } + public static boolean isMappedWithHibernate(PersistentEntity domainClass) { return domainClass instanceof HibernatePersistentEntity; diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/access/TraitPropertyAccessStrategy.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/access/TraitPropertyAccessStrategy.java index 6edaf21c5f..b9fe9d9c70 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/access/TraitPropertyAccessStrategy.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/access/TraitPropertyAccessStrategy.java @@ -114,7 +114,7 @@ public class TraitPropertyAccessStrategy implements PropertyAccessStrategy { } } - private String getTraitFieldName(Class traitClass, String fieldName) { + protected String getTraitFieldName(Class traitClass, String fieldName) { return traitClass.getName().replace('.', '_') + "__" + fieldName; } 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 a22e752407..522729047e 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 @@ -19,12 +19,12 @@ package org.grails.orm.hibernate.cfg.domainbinding.binder; import jakarta.annotation.Nonnull; -import org.grails.datastore.mapping.model.types.Association; import org.grails.orm.hibernate.cfg.domainbinding.hibernate.GrailsHibernatePersistentProperty; import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateEmbeddedProperty; import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateManyToOneProperty; import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateOneToOneProperty; import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateToManyProperty; +import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateToOneProperty; import org.hibernate.boot.spi.InFlightMetadataCollector; import org.hibernate.mapping.PersistentClass; @@ -90,10 +90,10 @@ public class GrailsPropertyBinder { table, path); } else { - value = manyToOneBinder.bindManyToOne((Association) currentGrailsProp, table, path); + value = manyToOneBinder.bindManyToOne((HibernateToOneProperty) currentGrailsProp, table, path); } } else if (currentGrailsProp instanceof HibernateManyToOneProperty manyToOne) { - value = manyToOneBinder.bindManyToOne((Association) currentGrailsProp, table, path); + value = manyToOneBinder.bindManyToOne( manyToOne, table, path); } else if (currentGrailsProp instanceof HibernateToManyProperty toMany && !currentGrailsProp.isSerializableType()) { // HibernateToManyProperty diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ManyToOneBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ManyToOneBinder.java index e640a8d6d5..9e7638def4 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ManyToOneBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ManyToOneBinder.java @@ -20,7 +20,6 @@ package org.grails.orm.hibernate.cfg.domainbinding.binder; import static org.grails.orm.hibernate.cfg.domainbinding.binder.GrailsDomainBinder.FOREIGN_KEY_SUFFIX; -import org.grails.datastore.mapping.model.types.Association; import org.grails.orm.hibernate.cfg.ColumnConfig; import org.grails.orm.hibernate.cfg.CompositeIdentity; import org.grails.orm.hibernate.cfg.JoinTable; @@ -29,6 +28,8 @@ import org.grails.orm.hibernate.cfg.PersistentEntityNamingStrategy; import org.grails.orm.hibernate.cfg.PropertyConfig; import org.grails.orm.hibernate.cfg.domainbinding.hibernate.GrailsHibernatePersistentEntity; import org.grails.orm.hibernate.cfg.domainbinding.hibernate.GrailsHibernatePersistentProperty; +import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateAssociation; +import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateToOneProperty; import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateManyToManyProperty; import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateOneToOneProperty; import org.grails.orm.hibernate.cfg.domainbinding.util.SimpleValueColumnFetcher; @@ -79,26 +80,23 @@ public class ManyToOneBinder { /** Binds a many-to-one relationship to the */ @SuppressWarnings("unchecked") public ManyToOne bindManyToOne( - Association property, org.hibernate.mapping.Table table, String path) { + HibernateAssociation property, org.hibernate.mapping.Table table, String path) { ManyToOne manyToOne = new ManyToOne(metadataBuildingContext, table); - GrailsHibernatePersistentProperty hibernateProperty = - (GrailsHibernatePersistentProperty) property; manyToOneValuesBinder.bindManyToOneValues(property, manyToOne); GrailsHibernatePersistentEntity refDomainClass = - (GrailsHibernatePersistentEntity) - (property instanceof HibernateManyToManyProperty - ? property.getOwner() - : property.getAssociatedEntity()); + (property instanceof HibernateManyToManyProperty + ? property.getHibernateOwner() + : property.getHibernateAssociatedEntity()); Mapping mapping = refDomainClass.getMappedForm(); boolean isComposite = mapping != null && mapping.hasCompositeIdentifier(); if (isComposite) { CompositeIdentity ci = (CompositeIdentity) mapping.getIdentity(); compositeIdentifierToManyToOneBinder.bindCompositeIdentifierToManyToOne( - hibernateProperty, manyToOne, ci, refDomainClass, path); + property, manyToOne, ci, refDomainClass, path); } else { if (property.isCircular() && (property instanceof HibernateManyToManyProperty)) { - PropertyConfig pc = hibernateProperty.getMappedForm(); + PropertyConfig pc = property.getMappedForm(); if (mapping != null && pc.getColumns().isEmpty()) { mapping.getColumns().put(property.getName(), pc); @@ -112,15 +110,15 @@ public class ManyToOneBinder { pc.setJoinTable(jt); } // set type - simpleValueBinder.bindSimpleValue(hibernateProperty, null, manyToOne, path); + simpleValueBinder.bindSimpleValue(property, null, manyToOne, path); } else { // bind column // set type - simpleValueBinder.bindSimpleValue(hibernateProperty, null, manyToOne, path); + simpleValueBinder.bindSimpleValue(property, null, manyToOne, path); } } - PropertyConfig config = hibernateProperty.getMappedForm(); + PropertyConfig config = property.getMappedForm(); boolean isOneToOne = property instanceof HibernateOneToOneProperty; boolean notComposite = !isComposite; if (isOneToOne && notComposite) { @@ -132,7 +130,9 @@ public class ManyToOneBinder { if (!config.isUniqueWithinGroup()) { c.setUnique(config.isUnique()); } else { - if (property.isBidirectional() && property.getInverseSide().isHasOne()) { + if (property.isBidirectional() + && property.getHibernateInverseSide() instanceof HibernateToOneProperty inverseSide + && inverseSide.isHibernateOneToOne()) { c.setUnique(true); } } diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ManyToOneValuesBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ManyToOneValuesBinder.java index bdc7bf3989..a37002ecfc 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ManyToOneValuesBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ManyToOneValuesBinder.java @@ -19,9 +19,8 @@ package org.grails.orm.hibernate.cfg.domainbinding.binder; import java.util.Optional; -import org.grails.datastore.mapping.model.types.Association; import org.grails.orm.hibernate.cfg.PropertyConfig; -import org.grails.orm.hibernate.cfg.domainbinding.hibernate.GrailsHibernatePersistentProperty; +import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateAssociation; import org.hibernate.FetchMode; import org.hibernate.mapping.ManyToOne; @@ -29,8 +28,8 @@ public class ManyToOneValuesBinder { public ManyToOneValuesBinder() {} - public void bindManyToOneValues(Association property, ManyToOne manyToOne) { - PropertyConfig config = ((GrailsHibernatePersistentProperty) property).getMappedForm(); + public void bindManyToOneValues(HibernateAssociation property, ManyToOne manyToOne) { + PropertyConfig config = property.getMappedForm(); var fetchMode = Optional.ofNullable(config.getFetchMode()).orElse(FetchMode.DEFAULT); manyToOne.setFetchMode(fetchMode); diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/GrailsHibernatePersistentProperty.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/GrailsHibernatePersistentProperty.java index b5fabf2c4b..f4630851dd 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/GrailsHibernatePersistentProperty.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/GrailsHibernatePersistentProperty.java @@ -48,9 +48,9 @@ public interface GrailsHibernatePersistentProperty extends PersistentProperty<Pr return this instanceof Association<?> association && association.isBidirectional(); } - default GrailsHibernatePersistentProperty getHibernateInverseSide() { + default HibernateAssociation getHibernateInverseSide() { return this instanceof Association<?> association - ? (GrailsHibernatePersistentProperty) association.getInverseSide() + ? (HibernateAssociation) association.getInverseSide() : null; } diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/HibernateAssociation.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/HibernateAssociation.java new file mode 100644 index 0000000000..b894cbbcc4 --- /dev/null +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/HibernateAssociation.java @@ -0,0 +1,57 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.grails.orm.hibernate.cfg.domainbinding.hibernate; + +/** + * Common interface for all Hibernate association properties (both ToOne and ToMany). Extends + * {@link GrailsHibernatePersistentProperty} and declares the key {@link + * org.grails.datastore.mapping.model.types.Association} methods directly so callers can use them + * without casting. Note: {@code Association} is an abstract class so cannot be listed as a + * super-interface; the implementing classes satisfy these contracts through their class hierarchy. + * + * @see HibernateToOneProperty + * @see HibernateToManyProperty + */ +public interface HibernateAssociation extends GrailsHibernatePersistentProperty { + + // --- Association contract (satisfied by the class hierarchy of all implementors) --- + + org.grails.datastore.mapping.model.PersistentProperty<?> getInverseSide(); + + org.grails.datastore.mapping.model.PersistentEntity getAssociatedEntity(); + + boolean isBidirectional(); + + boolean isOwningSide(); + + boolean isCircular(); + + // --- Hibernate-typed overrides, removing instanceof guards --- + + /** Returns the inverse side as a {@link HibernateAssociation}, eliminating cast at call sites. */ + @Override + default HibernateAssociation getHibernateInverseSide() { + return (HibernateAssociation) getInverseSide(); + } + + @Override + default GrailsHibernatePersistentEntity getHibernateAssociatedEntity() { + return (GrailsHibernatePersistentEntity) getAssociatedEntity(); + } +} diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/HibernateManyToOneProperty.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/HibernateManyToOneProperty.java index 298f750229..dacd497b16 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/HibernateManyToOneProperty.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/HibernateManyToOneProperty.java @@ -26,7 +26,7 @@ import org.grails.orm.hibernate.cfg.PropertyConfig; /** Hibernate implementation of {@link org.grails.datastore.mapping.model.types.ManyToOne} */ public class HibernateManyToOneProperty extends ManyToOneWithMapping<PropertyConfig> - implements GrailsHibernatePersistentProperty { + implements HibernateToOneProperty { 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/domainbinding/hibernate/HibernateOneToOneProperty.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/HibernateOneToOneProperty.java index dd0c2e5b2d..36f71c2be4 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/HibernateOneToOneProperty.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/HibernateOneToOneProperty.java @@ -26,7 +26,7 @@ import org.grails.orm.hibernate.cfg.PropertyConfig; /** Hibernate implementation of {@link org.grails.datastore.mapping.model.types.OneToOne} */ public class HibernateOneToOneProperty extends OneToOneWithMapping<PropertyConfig> - implements GrailsHibernatePersistentProperty { + implements HibernateToOneProperty { 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/domainbinding/hibernate/HibernateToManyProperty.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/HibernateToManyProperty.java index 7ba486c69b..4e92e2b190 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/HibernateToManyProperty.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/HibernateToManyProperty.java @@ -27,7 +27,7 @@ import org.springframework.util.StringUtils; /** Marker interface for Hibernate to-many associations */ public interface HibernateToManyProperty - extends PropertyWithMapping<PropertyConfig>, GrailsHibernatePersistentProperty { + extends PropertyWithMapping<PropertyConfig>, HibernateAssociation { default boolean hasSort() { return StringUtils.hasText(getMappedForm().getSort()); diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/HibernateOneToOneProperty.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/HibernateToOneProperty.java similarity index 51% copy from grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/HibernateOneToOneProperty.java copy to grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/HibernateToOneProperty.java index dd0c2e5b2d..12471c35ab 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/HibernateOneToOneProperty.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/hibernate/HibernateToOneProperty.java @@ -18,22 +18,8 @@ */ package org.grails.orm.hibernate.cfg.domainbinding.hibernate; -import java.beans.PropertyDescriptor; -import org.grails.datastore.mapping.model.MappingContext; -import org.grails.datastore.mapping.model.PersistentEntity; -import org.grails.datastore.mapping.model.types.mapping.OneToOneWithMapping; -import org.grails.orm.hibernate.cfg.PropertyConfig; - -/** Hibernate implementation of {@link org.grails.datastore.mapping.model.types.OneToOne} */ -public class HibernateOneToOneProperty extends OneToOneWithMapping<PropertyConfig> - implements GrailsHibernatePersistentProperty { - public HibernateOneToOneProperty( - PersistentEntity entity, MappingContext context, PropertyDescriptor property) { - super(entity, context, property); - } - - @Override - public GrailsHibernatePersistentEntity getHibernateAssociatedEntity() { - return (GrailsHibernatePersistentEntity) super.getAssociatedEntity(); - } -} +/** + * Marker interface for Hibernate to-one associations ({@link HibernateManyToOneProperty} and + * {@link HibernateOneToOneProperty}). Parallel to {@link HibernateToManyProperty}. + */ +public interface HibernateToOneProperty extends HibernateAssociation {} 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 3faf74f779..e452c90536 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 @@ -26,7 +26,6 @@ import java.util.Map; import java.util.Set; import org.grails.datastore.mapping.model.DatastoreConfigurationException; import org.grails.datastore.mapping.model.config.GormProperties; -import org.grails.datastore.mapping.model.types.Association; import org.grails.orm.hibernate.cfg.domainbinding.binder.CollectionForPropertyConfigBinder; import org.grails.orm.hibernate.cfg.domainbinding.binder.ManyToOneBinder; import org.grails.orm.hibernate.cfg.domainbinding.binder.SimpleValueColumnBinder; @@ -161,7 +160,7 @@ public class CollectionSecondPassBinder { var otherSide = property.getHibernateInverseSide(); ManyToOne element = manyToOneBinder.bindManyToOne( - (Association) otherSide, collection.getCollectionTable(), EMPTY_PATH); + otherSide, collection.getCollectionTable(), EMPTY_PATH); element.setReferencedEntityName(otherSide.getOwner().getName()); collection.setElement(element); collectionForPropertyConfigBinder.bindCollectionForPropertyConfig(collection, property); diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ManyToOneBinderSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ManyToOneBinderSpec.groovy index f77c7909b6..dc5df81691 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ManyToOneBinderSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ManyToOneBinderSpec.groovy @@ -1,7 +1,8 @@ package org.grails.orm.hibernate.cfg.domainbinding import grails.gorm.specs.HibernateGormDatastoreSpec -import org.grails.datastore.mapping.model.types.Association +import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateAssociation +import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateToOneProperty import org.grails.orm.hibernate.cfg.CompositeIdentity import org.grails.orm.hibernate.cfg.domainbinding.hibernate.GrailsHibernatePersistentEntity import org.grails.orm.hibernate.cfg.domainbinding.hibernate.GrailsHibernatePersistentProperty @@ -43,16 +44,16 @@ class ManyToOneBinderSpec extends HibernateGormDatastoreSpec { } def propertyConfig = new PropertyConfig() - association.getAssociatedEntity() >> refDomainClass + association.getHibernateAssociatedEntity() >> refDomainClass association.getMappedForm() >> propertyConfig mapping.setIdentity(hasCompositeId ? new CompositeIdentity() : null) when: - def result = binder.bindManyToOne(association as Association, null, path) + def result = binder.bindManyToOne(association as HibernateAssociation, null, path) then: result instanceof ManyToOne - 1 * manyToOneValuesBinder.bindManyToOneValues(association as Association, _ as ManyToOne) + 1 * manyToOneValuesBinder.bindManyToOneValues(association as HibernateAssociation, _ as ManyToOne) compositeBinderCalls * compositeBinder.bindCompositeIdentifierToManyToOne(association as GrailsHibernatePersistentProperty, _ as ManyToOne, _, refDomainClass, path) simpleValueBinderCalls * simpleValueBinder.bindSimpleValue(association as GrailsHibernatePersistentProperty, null, _ as ManyToOne, path) @@ -82,16 +83,17 @@ class ManyToOneBinderSpec extends HibernateGormDatastoreSpec { property.isCircular() >> true property.getOwner() >> ownerEntity + property.getHibernateOwner() >> ownerEntity property.getName() >> "myCircularProp" property.getMappedForm() >> propertyConfig namingStrategy.resolveColumnName("myCircularProp") >> "my_circular_prop" when: - def result = binder.bindManyToOne(property as Association, null, "/test") + def result = binder.bindManyToOne(property as HibernateAssociation, null, "/test") then: result instanceof ManyToOne - 1 * manyToOneValuesBinder.bindManyToOneValues(property as Association, _ as ManyToOne) + 1 * manyToOneValuesBinder.bindManyToOneValues(property as HibernateAssociation, _ as ManyToOne) 1 * simpleValueBinder.bindSimpleValue(property as GrailsHibernatePersistentProperty, null, _ as ManyToOne, "/test") def resultConfig = mapping.getColumns().get("myCircularProp") resultConfig != null @@ -116,9 +118,9 @@ class ManyToOneBinderSpec extends HibernateGormDatastoreSpec { } def propertyConfig = Mock(PropertyConfig) def column = new Column('test') - def inverseSide = Mock(Association) + def inverseSide = Mock(HibernateToOneProperty) - property.getAssociatedEntity() >> refDomainClass + property.getHibernateAssociatedEntity() >> refDomainClass mapping.setIdentity(null) property.getMappedForm() >> propertyConfig columnFetcher.getColumnForSimpleValue(_ as ManyToOne) >> column @@ -126,11 +128,11 @@ class ManyToOneBinderSpec extends HibernateGormDatastoreSpec { propertyConfig.isUnique() >> isUnique propertyConfig.isUniqueWithinGroup() >> isUniqueWithinGroup property.isBidirectional() >> isBidirectional - property.getInverseSide() >> inverseSide - inverseSide.isHasOne() >> isInverseHasOne + property.getHibernateInverseSide() >> inverseSide + inverseSide.isHibernateOneToOne() >> isInverseHasOne when: - def result = binder.bindManyToOne(property as Association, null, "/test") + def result = binder.bindManyToOne(property as HibernateAssociation, null, "/test") then: result.isAlternateUniqueKey() @@ -166,13 +168,13 @@ class ManyToOneBinderSpec extends HibernateGormDatastoreSpec { } def propertyConfig = new PropertyConfig() - property.getAssociatedEntity() >> refDomainClass + property.getHibernateAssociatedEntity() >> refDomainClass mapping.setIdentity(null) property.getMappedForm() >> propertyConfig columnFetcher.getColumnForSimpleValue(_ as ManyToOne) >> null when: - binder.bindManyToOne(property as Association, null, "/test") + binder.bindManyToOne(property as HibernateAssociation, null, "/test") then: thrown(MappingException) diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ManyToOneValuesBinderSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ManyToOneValuesBinderSpec.groovy index 6b9bcedb44..329977265f 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ManyToOneValuesBinderSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/ManyToOneValuesBinderSpec.groovy @@ -2,8 +2,7 @@ package org.grails.orm.hibernate.cfg.domainbinding import grails.gorm.specs.HibernateGormDatastoreSpec import org.grails.datastore.mapping.model.PersistentEntity -import org.grails.datastore.mapping.model.types.Association -import org.grails.orm.hibernate.cfg.domainbinding.hibernate.GrailsHibernatePersistentProperty +import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateAssociation import org.grails.orm.hibernate.cfg.PropertyConfig import org.hibernate.FetchMode import org.hibernate.mapping.ManyToOne @@ -20,7 +19,7 @@ class ManyToOneValuesBinderSpec extends HibernateGormDatastoreSpec { def binder = new ManyToOneValuesBinder() // 2. Set up mocks for the method arguments - def association = Mock(Association, additionalInterfaces: [GrailsHibernatePersistentProperty]) + def association = Mock(HibernateAssociation) def manyToOne = new ManyToOne(getGrailsDomainBinder().getMetadataBuildingContext(),null) def associatedEntity = Mock(PersistentEntity) @@ -33,12 +32,12 @@ class ManyToOneValuesBinderSpec extends HibernateGormDatastoreSpec { config.setIgnoreNotFound(testIgnoreNotFound) // 4. Define mock behaviors - ((GrailsHibernatePersistentProperty)association).getMappedForm() >> config + association.getMappedForm() >> config association.getAssociatedEntity() >> associatedEntity associatedEntity.getName() >> "AssociatedEntityName" when: - binder.bindManyToOneValues(association as Association, manyToOne) + binder.bindManyToOneValues(association, manyToOne) then: // 5. Verify that the correct values were set on the ManyToOne object diff --git a/grails-datastore-core/src/main/groovy/org/grails/datastore/mapping/model/types/mapping/ManyToManyWithMapping.java b/grails-datastore-core/src/main/groovy/org/grails/datastore/mapping/model/types/mapping/ManyToManyWithMapping.java index ad83011fb3..f1193bf3e6 100644 --- a/grails-datastore-core/src/main/groovy/org/grails/datastore/mapping/model/types/mapping/ManyToManyWithMapping.java +++ b/grails-datastore-core/src/main/groovy/org/grails/datastore/mapping/model/types/mapping/ManyToManyWithMapping.java @@ -43,10 +43,6 @@ public class ManyToManyWithMapping<T extends Property> extends ManyToMany<T> imp super(entity, context, property); } - public ManyToManyWithMapping(PersistentEntity entity, MappingContext context, PropertyDescriptor property, PropertyMapping<T> propertyMapping) { - super(entity, context, property); - this.propertyMapping = propertyMapping; - } @Override public PropertyMapping<T> getMapping() {
