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
The following commit(s) were added to refs/heads/8.0.x-hibernate7-dev by this
push:
new 54ad6b0604 hibernate 7: refactor BindCollectionElementBinder
54ad6b0604 is described below
commit 54ad6b0604387779c1d95e858d59909425e2d98c
Author: Walter Duque de Estrada <[email protected]>
AuthorDate: Tue Mar 17 20:55:40 2026 -0500
hibernate 7: refactor BindCollectionElementBinder
---
.../hibernate/HibernateToManyProperty.java | 30 ++++++++++++++++++++++
.../secondpass/BasicCollectionElementBinder.java | 25 ++++--------------
2 files changed, 35 insertions(+), 20 deletions(-)
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 8c1bb50e50..20bdb67177 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
@@ -21,6 +21,7 @@ package org.grails.orm.hibernate.cfg.domainbinding.hibernate;
import java.util.Map;
import java.util.Optional;
+import org.checkerframework.checker.nullness.qual.NonNull;
import org.hibernate.FetchMode;
import org.hibernate.mapping.Collection;
import org.hibernate.mapping.IndexedCollection;
@@ -35,6 +36,9 @@ import org.grails.orm.hibernate.cfg.JoinTable;
import org.grails.orm.hibernate.cfg.PersistentEntityNamingStrategy;
import org.grails.orm.hibernate.cfg.PropertyConfig;
import org.grails.orm.hibernate.cfg.domainbinding.binder.GrailsDomainBinder;
+import org.grails.orm.hibernate.cfg.domainbinding.util.BackticksRemover;
+
+import static
org.grails.orm.hibernate.cfg.domainbinding.binder.GrailsDomainBinder.UNDERSCORE;
/** Marker interface for Hibernate to-many associations */
public interface HibernateToManyProperty extends
PropertyWithMapping<PropertyConfig>, HibernateAssociation {
@@ -130,6 +134,32 @@ public interface HibernateToManyProperty extends
PropertyWithMapping<PropertyCon
+ GrailsDomainBinder.FOREIGN_KEY_SUFFIX);
}
+ default String joinTableColumName(PersistentEntityNamingStrategy
namingStrategy) {
+ final Class<?> referencedType =getComponentType();
+ var joinColumnMappingOptional = getColumnConfigOptional();
+ boolean present = joinColumnMappingOptional.isPresent();
+ String columnName;
+ if (present) {
+ columnName = joinColumnMappingOptional.get().getName();
+ } else {
+ var clazz =
namingStrategy.resolveColumnName(referencedType.getName());
+ var prop = namingStrategy.resolveTableName(getName());
+ columnName = referencedType.isEnum()
+ ? clazz
+ : new BackticksRemover().apply(prop) + UNDERSCORE + new
BackticksRemover().apply(clazz);
+ }
+ return columnName;
+ }
+
+ @NonNull
+ default Optional<ColumnConfig> getColumnConfigOptional() {
+ return
Optional.ofNullable(getMappedForm()).map(PropertyConfig::getJoinTableColumnConfig);
+ }
+
+ default boolean isEnum() {
+ return getComponentType().isEnum();
+ }
+
void setCollection(Collection collection);
Collection getCollection();
}
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 c27777524f..b6a52809e6 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
@@ -25,14 +25,12 @@ import org.hibernate.mapping.BasicValue;
import org.hibernate.mapping.Collection;
import org.hibernate.mapping.Column;
-import org.grails.orm.hibernate.cfg.ColumnConfig;
import org.grails.orm.hibernate.cfg.PersistentEntityNamingStrategy;
import org.grails.orm.hibernate.cfg.PropertyConfig;
import
org.grails.orm.hibernate.cfg.domainbinding.binder.ColumnConfigToColumnBinder;
import org.grails.orm.hibernate.cfg.domainbinding.binder.EnumTypeBinder;
import
org.grails.orm.hibernate.cfg.domainbinding.binder.SimpleValueColumnBinder;
import
org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateToManyProperty;
-import org.grails.orm.hibernate.cfg.domainbinding.util.BackticksRemover;
import
org.grails.orm.hibernate.cfg.domainbinding.util.SimpleValueColumnFetcher;
import static
org.grails.orm.hibernate.cfg.domainbinding.binder.GrailsDomainBinder.UNDERSCORE;
@@ -65,33 +63,20 @@ public class BasicCollectionElementBinder {
/** Creates and binds a {@link BasicValue} element for the given basic
collection property. */
public BasicValue bind(HibernateToManyProperty property) {
- final Class<?> referencedType = property.getComponentType();
- var joinColumnMappingOptional =
-
Optional.ofNullable(property.getMappedForm()).map(PropertyConfig::getJoinTableColumnConfig);
- boolean present = joinColumnMappingOptional.isPresent();
- String columnName;
- if (present) {
- columnName = joinColumnMappingOptional.get().getName();
- } else {
- var clazz =
namingStrategy.resolveColumnName(referencedType.getName());
- var prop = namingStrategy.resolveTableName(property.getName());
- columnName = referencedType.isEnum()
- ? clazz
- : new BackticksRemover().apply(prop) + UNDERSCORE + new
BackticksRemover().apply(clazz);
- }
- if (referencedType.isEnum()) {
+ String columnName = property.joinTableColumName(namingStrategy);
+ if (property.isEnum()) {
return enumTypeBinder.bindEnumTypeForColumn(property, columnName);
} else {
+ final Class<?> referencedType = property.getComponentType();
String typeName = property.getTypeName(referencedType);
Collection collection = property.getCollection();
BasicValue element = simpleValueColumnBinder.bindSimpleValue(
metadataBuildingContext, collection.getCollectionTable(),
typeName, columnName, true);
- if (present) {
+ property.getColumnConfigOptional().ifPresent(columnConfig -> {
Column column =
simpleValueColumnFetcher.getColumnForSimpleValue(element);
- ColumnConfig columnConfig = joinColumnMappingOptional.get();
final PropertyConfig mappedForm = property.getMappedForm();
columnConfigToColumnBinder.bindColumnConfigToColumn(column,
columnConfig, mappedForm);
- }
+ });
return element;
}
}