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)
