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;
         }
     }

Reply via email to