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 fa5f590027d7f0388839f02323aadcf48693c396
Author: Walter Duque de Estrada <[email protected]>
AuthorDate: Tue Feb 10 08:52:12 2026 -0600

       1. `ColumnConfigToColumnBinder.java`:
           * Rewrote bindColumnConfigToColumn using Optional chains to handle 
optional configuration values (length, precision, scale, sqlType, and unique).
---
 .../cfg/GrailsHibernatePersistentProperty.java     |  9 -----
 .../hibernate/cfg/domainbinding/ColumnBinder.java  |  1 +
 .../domainbinding/ColumnConfigToColumnBinder.java  | 43 ++++++++++++----------
 .../cfg/domainbinding/SimpleValueBinder.java       |  9 +++--
 .../GrailsHibernatePersistentPropertySpec.groovy   | 16 --------
 5 files changed, 29 insertions(+), 49 deletions(-)

diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsHibernatePersistentProperty.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsHibernatePersistentProperty.java
index a983df2a81..e561c12fed 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsHibernatePersistentProperty.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsHibernatePersistentProperty.java
@@ -136,14 +136,5 @@ public interface GrailsHibernatePersistentProperty extends 
PersistentProperty<Pr
                 .orElseGet(() -> namingStrategy.resolveColumnName(getName()) + 
GrailsDomainBinder.UNDERSCORE + IndexedCollection.DEFAULT_ELEMENT_COLUMN_NAME);
     }
 
-    default boolean isColumnNullable() {
-        return Optional.ofNullable(getHibernateOwner())
-                .filter(owner -> !owner.isRoot())
-                .map(owner -> Optional.ofNullable(owner.getMappedForm())
-                        .map(Mapping::getTablePerHierarchy)
-                        .orElse(false) || isNullable())
-                .orElse(false);
-    }
-
 
 }
\ No newline at end of file
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/ColumnBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/ColumnBinder.java
index 188a9c6310..c4b3efa6c0 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/ColumnBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/ColumnBinder.java
@@ -127,6 +127,7 @@ public class ColumnBinder {
         createKeyForProps.createKeyForProps(property, path, table, columnName);
         indexBinder.bindIndex(columnName, column, cc, table);
 
+
         var owner = property.getHibernateOwner();
         if (!owner.isRoot()) {
             Mapping mapping = owner.getMappedForm();
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/ColumnConfigToColumnBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/ColumnConfigToColumnBinder.java
index bbeb4aa75a..f6c360af07 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/ColumnConfigToColumnBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/ColumnConfigToColumnBinder.java
@@ -5,30 +5,33 @@ import org.grails.orm.hibernate.cfg.ColumnConfig;
 import org.grails.orm.hibernate.cfg.PropertyConfig;
 import org.hibernate.mapping.Column;
 
+import java.util.Optional;
+
 public class ColumnConfigToColumnBinder {
 
     public void bindColumnConfigToColumn(
-             Column column,
-             ColumnConfig columnConfig,
+             @Nonnull Column column,
+             @Nonnull ColumnConfig columnConfig,
             PropertyConfig mappedForm
         ) {
-        if (columnConfig == null) {
-            return;
-        }
-        if (columnConfig.getLength() != -1) {
-            column.setLength(columnConfig.getLength());
-        }
-        if (columnConfig.getPrecision() != -1) {
-            column.setPrecision(columnConfig.getPrecision());
-        }
-        if (columnConfig.getScale() != -1) {
-            column.setScale(columnConfig.getScale());
-        }
-        if (columnConfig.getSqlType() != null && 
!columnConfig.getSqlType().isEmpty()) {
-            column.setSqlType(columnConfig.getSqlType());
-        }
-        if(mappedForm != null && !mappedForm.isUniqueWithinGroup()) {
-            column.setUnique(columnConfig.getUnique());
-        }
+        Optional.of(columnConfig.getLength())
+                .filter(l -> l != -1)
+                .ifPresent(column::setLength);
+
+        Optional.of(columnConfig.getPrecision())
+                .filter(p -> p != -1)
+                .ifPresent(column::setPrecision);
+
+        Optional.of(columnConfig.getScale())
+                .filter(s -> s != -1)
+                .ifPresent(column::setScale);
+
+        Optional.ofNullable(columnConfig.getSqlType())
+                .filter(s -> !s.isEmpty())
+                .ifPresent(column::setSqlType);
+
+        Optional.ofNullable(mappedForm)
+                .filter(mf -> !mf.isUniqueWithinGroup())
+                .ifPresent(mf -> column.setUnique(columnConfig.getUnique()));
     }
 }
diff --git 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleValueBinder.java
 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleValueBinder.java
index cc93ba628b..3e11b57e7c 100644
--- 
a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleValueBinder.java
+++ 
b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/SimpleValueBinder.java
@@ -1,19 +1,19 @@
 package org.grails.orm.hibernate.cfg.domainbinding;
 
-import java.util.Arrays;
+import java.util.ArrayList;
 import java.util.Optional;
 import java.util.Properties;
 
 import org.hibernate.id.enhanced.SequenceStyleGenerator;
 import org.hibernate.mapping.BasicValue;
 import org.hibernate.mapping.Column;
+import org.hibernate.mapping.DependantValue;
 import org.hibernate.mapping.Formula;
 import org.hibernate.mapping.SimpleValue;
 import org.hibernate.mapping.Table;
 
 import org.grails.datastore.mapping.model.PersistentProperty;
 import org.grails.datastore.mapping.model.types.TenantId;
-import org.grails.orm.hibernate.cfg.ColumnConfig;
 import org.grails.orm.hibernate.cfg.GrailsHibernatePersistentEntity;
 import org.grails.orm.hibernate.cfg.GrailsHibernatePersistentProperty;
 import org.grails.orm.hibernate.cfg.Mapping;
@@ -127,12 +127,12 @@ public class SimpleValueBinder {
 
             Optional.ofNullable(propertyConfig.getColumns())
                     .filter(list -> !list.isEmpty())
-                    .orElse(Arrays.asList(new ColumnConfig[]{null}))
+                    .orElse(new ArrayList<>())
                     .forEach(cc -> {
                         Column column = new Column();
                         
columnConfigToColumnBinder.bindColumnConfigToColumn(column, cc, propertyConfig);
                         
columnBinder.bindColumn((GrailsHibernatePersistentProperty) property, 
(GrailsHibernatePersistentProperty) parentProperty, column, cc, path, table);
-                        if (simpleValue instanceof 
org.hibernate.mapping.DependantValue) {
+                        if (simpleValue instanceof DependantValue) {
                             column.setNullable(true);
                         }
                         if (table != null) {
@@ -142,4 +142,5 @@ public class SimpleValueBinder {
                     });
         }
     }
+
 }
diff --git 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/GrailsHibernatePersistentPropertySpec.groovy
 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/GrailsHibernatePersistentPropertySpec.groovy
index fbdf9135eb..f1f7f53abc 100644
--- 
a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/GrailsHibernatePersistentPropertySpec.groovy
+++ 
b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/GrailsHibernatePersistentPropertySpec.groovy
@@ -125,22 +125,6 @@ class GrailsHibernatePersistentPropertySpec extends 
HibernateGormDatastoreSpec {
         !subTPCProp.isTablePerHierarchySubclass()
     }
 
-    void "test isColumnNullable"() {
-        given:
-        PersistentEntity baseTPH = createPersistentEntity(BaseTPH)
-        PersistentEntity subTPH = createPersistentEntity(SubTPH)
-        PersistentEntity subTPC = createPersistentEntity(SubTablePerClass)
-
-        GrailsHibernatePersistentProperty baseTPHProp = 
(GrailsHibernatePersistentProperty) baseTPH.getPropertyByName("id")
-        GrailsHibernatePersistentProperty subTPHProp = 
(GrailsHibernatePersistentProperty) subTPH.getPropertyByName("subProp")
-        GrailsHibernatePersistentProperty subTPCProp = 
(GrailsHibernatePersistentProperty) subTPC.getPropertyByName("subProp")
-
-        expect:
-        !baseTPHProp.isColumnNullable() // Root is false
-        subTPHProp.isColumnNullable()   // Subclass TPH is true
-        !subTPCProp.isColumnNullable()  // Subclass not TPH uses isNullable() 
which is false by default
-    }
-
     void "test getIndexColumnName and getMapElementName"() {
         given:
         def jdbcEnvironment = 
Mock(org.hibernate.engine.jdbc.env.spi.JdbcEnvironment)

Reply via email to