This is an automated email from the ASF dual-hosted git repository. borinquenkid pushed a commit to branch 8.0.x-hibernate7-dev in repository https://gitbox.apache.org/repos/asf/grails-core.git
commit bb3c44fcc72ede27bbb46bf87b1a4685cfc50e7b Author: Walter Duque de Estrada <[email protected]> AuthorDate: Sun Mar 15 18:11:52 2026 -0500 hibernate 7 refactoring EnumTypeBinder --- .../cfg/domainbinding/binder/ClassPropertiesBinder.java | 1 - .../cfg/domainbinding/binder/EnumTypeBinder.java | 4 ++-- .../cfg/domainbinding/binder/GrailsPropertyBinder.java | 2 +- .../secondpass/BasicCollectionElementBinder.java | 2 +- .../hibernate/cfg/domainbinding/EnumTypeBinderSpec.groovy | 8 ++++---- .../secondpass/BasicCollectionElementBinderSpec.groovy | 15 +++++++++++---- 6 files changed, 19 insertions(+), 13 deletions(-) diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ClassPropertiesBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ClassPropertiesBinder.java index 0750d96e0b..6290290316 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ClassPropertiesBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/ClassPropertiesBinder.java @@ -61,7 +61,6 @@ public class ClassPropertiesBinder { public void bindClassProperties(HibernatePersistentEntity hibernatePersistentEntity) { PersistentClass persistentClass = hibernatePersistentEntity.getPersistentClass(); getTable(persistentClass).setComment(hibernatePersistentEntity.getComment()); - Table table = hibernatePersistentEntity.getPersistentClass().getTable(); for (HibernatePersistentProperty currentGrailsProp : hibernatePersistentEntity.getPersistentPropertiesToBind()) { Value value = grailsPropertyBinder.bindProperty( currentGrailsProp, null, GrailsDomainBinder.EMPTY_PATH); diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/EnumTypeBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/EnumTypeBinder.java index 9dc940fdae..0f4cfd99e2 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/EnumTypeBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/EnumTypeBinder.java @@ -72,7 +72,7 @@ public class EnumTypeBinder { private static final Logger LOG = LoggerFactory.getLogger(EnumTypeBinder.class); public BasicValue bindEnumType( - @Nonnull HibernateEnumProperty property, Class<?> propertyType, Table table, String path) { + @Nonnull HibernateEnumProperty property, Class<?> propertyType, String path) { String columnName = columnNameForPropertyAndPathFetcher.getColumnNameForPropertyAndPath(property, path, null); BasicValue simpleValue = new BasicValue(metadataBuildingContext, property.getTable()); bindEnumType(property, propertyType, simpleValue, columnName); @@ -80,7 +80,7 @@ public class EnumTypeBinder { } public BasicValue bindEnumTypeForColumn( - @Nonnull HibernateToManyProperty property, Class<?> propertyType, Table table, @Nonnull String columnName) { + @Nonnull HibernateToManyProperty property, Class<?> propertyType, @Nonnull String columnName) { BasicValue simpleValue = new BasicValue(metadataBuildingContext, property.getTable()); bindEnumType(property, propertyType, simpleValue, columnName); return simpleValue; 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 ef6db12b79..d7577fd1b8 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 @@ -75,7 +75,7 @@ public class GrailsPropertyBinder { // 1. Create Value and apply binders (consolidated block) if (currentGrailsProp instanceof HibernateEnumProperty hibernateEnumProperty) { - value = enumTypeBinder.bindEnumType(hibernateEnumProperty, currentGrailsProp.getType(), table, path); + value = enumTypeBinder.bindEnumType(hibernateEnumProperty, currentGrailsProp.getType(), path); } else if (currentGrailsProp instanceof HibernateOneToOneProperty oneToOne && oneToOne.isValidHibernateOneToOne()) { value = oneToOneBinder.bindOneToOne(oneToOne, path); diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/BasicCollectionElementBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/BasicCollectionElementBinder.java index 77ba8313ac..80870f4fa8 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/BasicCollectionElementBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/BasicCollectionElementBinder.java @@ -81,7 +81,7 @@ public class BasicCollectionElementBinder { : new BackticksRemover().apply(prop) + UNDERSCORE + new BackticksRemover().apply(clazz); } if (isEnum) { - return enumTypeBinder.bindEnumTypeForColumn(property, referencedType, collection.getCollectionTable(), columnName); + return enumTypeBinder.bindEnumTypeForColumn(property, referencedType, columnName); } else { String typeName = property.getTypeName(referencedType); BasicValue element = simpleValueColumnBinder.bindSimpleValue( diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/EnumTypeBinderSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/EnumTypeBinderSpec.groovy index 2c7d7f3c3e..68cae61fa4 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/EnumTypeBinderSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/EnumTypeBinderSpec.groovy @@ -68,7 +68,7 @@ class EnumTypeBinderSpec extends HibernateGormDatastoreSpec { PersistentProperty property = setupEntity(clazz, table) when: "the enum is bound" - def simpleValue = binder.bindEnumTypeForColumn(property as HibernateToManyProperty, Status01, table, "status_col") + def simpleValue = binder.bindEnumTypeForColumn(property as HibernateToManyProperty, Status01, "status_col") then: "the correct hibernate type is set" simpleValue.getTypeName() == expectedHibernateType @@ -95,7 +95,7 @@ class EnumTypeBinderSpec extends HibernateGormDatastoreSpec { PersistentProperty property = setupEntity(clazz, table) when: "the enum is bound" - def simpleValue = binder.bindEnumTypeForColumn(property as HibernateToManyProperty, Status01, table, columnName) + def simpleValue = binder.bindEnumTypeForColumn(property as HibernateToManyProperty, Status01, columnName) then: table.columns.size() == 1 @@ -121,7 +121,7 @@ class EnumTypeBinderSpec extends HibernateGormDatastoreSpec { PersistentProperty property = setupEntity(clazz, table) when: "the enum is bound" - binder.bindEnumTypeForColumn(property as HibernateToManyProperty, Status01, table, columnName) + binder.bindEnumTypeForColumn(property as HibernateToManyProperty, Status01, columnName) then: "the index and column binders are invoked the correct number of times" times * indexBinder.bindIndex(columnName, _ as Column, _, table) @@ -139,7 +139,7 @@ class EnumTypeBinderSpec extends HibernateGormDatastoreSpec { PersistentProperty property = setupEntity(Person01, table) when: "the enum is bound using the new signature" - def result = binder.bindEnumType(property as HibernateEnumProperty, Status01, table, "") + def result = binder.bindEnumType(property as HibernateEnumProperty, Status01, "") then: "a BasicValue is returned and bound correctly" result instanceof BasicValue diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/BasicCollectionElementBinderSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/BasicCollectionElementBinderSpec.groovy index 4e3e35b933..f06343e511 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/BasicCollectionElementBinderSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/secondpass/BasicCollectionElementBinderSpec.groovy @@ -12,7 +12,6 @@ import org.hibernate.mapping.Collection import org.hibernate.mapping.RootClass import org.hibernate.mapping.Set import org.hibernate.mapping.Table -import org.hibernate.type.spi.TypeConfiguration import spock.lang.Subject class BasicCollectionElementBinderSpec extends HibernateGormDatastoreSpec { @@ -20,10 +19,13 @@ class BasicCollectionElementBinderSpec extends HibernateGormDatastoreSpec { @Subject BasicCollectionElementBinder binder + // Mock the collaborator EnumTypeBinder enumTypeBinder = Mock(EnumTypeBinder) void setup() { def domainBinder = getGrailsDomainBinder() + + // Inject the mocked enumTypeBinder into the Subject binder = new BasicCollectionElementBinder( domainBinder.metadataBuildingContext, domainBinder.namingStrategy, @@ -55,7 +57,8 @@ class BasicCollectionElementBinderSpec extends HibernateGormDatastoreSpec { then: element != null element.getColumnSpan() > 0 - 0 * enumTypeBinder._ + // Ensure the enum binder is NOT called for a String collection + 0 * enumTypeBinder.bindEnumTypeForColumn(_, _, _) } void "bind delegates to enumTypeBinder for enum collection"() { @@ -66,12 +69,16 @@ class BasicCollectionElementBinderSpec extends HibernateGormDatastoreSpec { property.setCollection(collection) + // Create a dummy BasicValue to return from the mock + def mockValue = new BasicValue(getGrailsDomainBinder().metadataBuildingContext, collection.getCollectionTable()) + when: BasicValue element = binder.bind(property) then: element != null - 1 * enumTypeBinder.bindEnumTypeForColumn(property, BCEBStatus, collection.getCollectionTable(), _) >> Mock(BasicValue) + // Corrected: Match the 3-argument signature (Property, Class, String) + 1 * enumTypeBinder.bindEnumTypeForColumn(property, BCEBStatus, _ as String) >> mockValue } } @@ -83,4 +90,4 @@ class BCEBAuthor { java.util.Set<String> tags java.util.Set<BCEBStatus> statuses static hasMany = [tags: String, statuses: BCEBStatus] -} +} \ No newline at end of file
