This is an automated email from the ASF dual-hosted git repository. borinquenkid pushed a commit to branch merge-hibernate6 in repository https://gitbox.apache.org/repos/asf/grails-core.git
commit 98bd074f39a888b9bfc58209bb2aefaa89c14035 Author: Walter Duque de Estrada <[email protected]> AuthorDate: Mon Jul 14 22:29:49 2025 -0500 refactor PersistentPropertyToPropertyConfig --- .../orm/hibernate/cfg/GrailsDomainBinder.java | 80 ++++++++++------------ .../PersistentPropertyToPropertyConfig.java | 17 +++++ 2 files changed, 54 insertions(+), 43 deletions(-) diff --git a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java index 7ab62ed2c9..9fe86e8ac9 100644 --- a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java +++ b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java @@ -39,6 +39,7 @@ import org.grails.orm.hibernate.cfg.domainbinding.ConfigureDerivedPropertiesCons import org.grails.orm.hibernate.cfg.domainbinding.IndexBinder; import org.grails.orm.hibernate.cfg.domainbinding.NamingStrategyProvider; import org.grails.orm.hibernate.cfg.domainbinding.NumericColumnConstraintsBinder; +import org.grails.orm.hibernate.cfg.domainbinding.PersistentPropertyToPropertyConfig; import org.grails.orm.hibernate.cfg.domainbinding.SimpleValueBinder; import org.grails.orm.hibernate.cfg.domainbinding.StringColumnConstraintsBinder; import org.grails.orm.hibernate.cfg.domainbinding.TypeNameProvider; @@ -283,7 +284,7 @@ public class GrailsDomainBinder implements MetadataContributor { String type = getIndexColumnType(property, STRING_TYPE); String columnName1 = getIndexColumnName(property, sessionFactoryBeanName); new SimpleValueBinder().bindSimpleValue(value, type, columnName1, true); - PropertyConfig mappedForm = getPropertyConfig(property); + PropertyConfig mappedForm = new PersistentPropertyToPropertyConfig().apply(property); if (mappedForm != null && mappedForm.getIndexColumn() != null) { Column column = getColumnForSimpleValue(value); ColumnConfig columnConfig = getSingleColumnConfig(mappedForm.getIndexColumn()); @@ -300,7 +301,7 @@ public class GrailsDomainBinder implements MetadataContributor { SimpleValue elt = new BasicValue(metadataBuildingContext, map.getCollectionTable()); map.setElement(elt); - PropertyConfig config = getPropertyConfig(property); + PropertyConfig config = new PersistentPropertyToPropertyConfig().apply(property); Mapping mapping = getMapping(property.getOwner()); String typeName = new TypeNameProvider().getTypeName(property, config, mapping); if (typeName == null ) { @@ -423,7 +424,7 @@ public class GrailsDomainBinder implements MetadataContributor { + " -> " + collection.getCollectionTable().getName()); - PropertyConfig propConfig = getPropertyConfig(property); + PropertyConfig propConfig = new PersistentPropertyToPropertyConfig().apply(property); PersistentEntity referenced = property.getAssociatedEntity(); if (propConfig != null && StringUtils.hasText(propConfig.getSort())) { @@ -775,7 +776,7 @@ public class GrailsDomainBinder implements MetadataContributor { if (hasJoinColumnMapping) { Column column = getColumnForSimpleValue(element); ColumnConfig columnConfig = config.getJoinTable().getColumn(); - final PropertyConfig mappedForm = getPropertyConfig(property); + final PropertyConfig mappedForm = new PersistentPropertyToPropertyConfig().apply(property); new ColumnConfigToColumnBinder().bindColumnConfigToColumn(column, columnConfig, mappedForm); } } @@ -823,7 +824,7 @@ public class GrailsDomainBinder implements MetadataContributor { } private boolean shouldCollectionBindWithJoinColumn(ToMany property) { - PropertyConfig config = getPropertyConfig(property); + PropertyConfig config = new PersistentPropertyToPropertyConfig().apply(property); JoinTable jt = config != null ? config.getJoinTable() : new JoinTable(); return (isUnidirectionalOneToMany(property) || (property instanceof Basic)) && jt != null; @@ -834,7 +835,7 @@ public class GrailsDomainBinder implements MetadataContributor { * @param manyToOne The inverse side */ private void bindUnidirectionalOneToManyInverseValues(ToMany property, ManyToOne manyToOne) { - PropertyConfig config = getPropertyConfig(property); + PropertyConfig config = new PersistentPropertyToPropertyConfig().apply(property); if (config == null) { manyToOne.setLazy(true); } else { @@ -870,13 +871,6 @@ public class GrailsDomainBinder implements MetadataContributor { } } - private PropertyConfig getPropertyConfig(PersistentProperty property) { - return Optional.ofNullable(property) - .map(PersistentProperty::getMappedForm) - .map(PropertyConfig.class::cast) - .orElse(null); - } - /** * Checks whether a property is a unidirectional non-circular one-to-many * @@ -1070,7 +1064,7 @@ public class GrailsDomainBinder implements MetadataContributor { String propertyName = getNameForPropertyAndPath(property, path); collection.setRole(qualify(property.getOwner().getName(), propertyName)); - PropertyConfig pc = getPropertyConfig(property); + PropertyConfig pc = new PersistentPropertyToPropertyConfig().apply(property); // configure eager fetching final FetchMode fetchMode = pc.getFetchMode(); if (fetchMode == FetchMode.JOIN) { @@ -1141,7 +1135,7 @@ public class GrailsDomainBinder implements MetadataContributor { Collection collection, Table ownerTable, String sessionFactoryBeanName) { String owningTableSchema = ownerTable.getSchema(); - PropertyConfig config = getPropertyConfig(property); + PropertyConfig config = new PersistentPropertyToPropertyConfig().apply(property); JoinTable jt = config != null ? config.getJoinTable() : null; PhysicalNamingStrategy namingStrategy = getPhysicalNamingStrategy(sessionFactoryBeanName); @@ -1177,7 +1171,7 @@ public class GrailsDomainBinder implements MetadataContributor { String propertyColumnName = namingStrategy.toPhysicalColumnName(toIdentifier(property.getName()), getJdbcEnvironment()).toString(); //fix for GRAILS-5895 - PropertyConfig config = getPropertyConfig(property); + PropertyConfig config = new PersistentPropertyToPropertyConfig().apply(property); JoinTable jt = config != null ? config.getJoinTable() : null; boolean hasJoinTableMapping = jt != null && jt.getName() != null; String left = getTableName(property.getOwner(), sessionFactoryBeanName); @@ -1871,7 +1865,7 @@ public class GrailsDomainBinder implements MetadataContributor { bindSimpleValue(currentGrailsProp, null, (SimpleValue) value, EMPTY_PATH, mappings, sessionFactoryBeanName); } else if (collectionType != null) { - PropertyConfig config = getPropertyConfig(currentGrailsProp); + PropertyConfig config = new PersistentPropertyToPropertyConfig().apply(currentGrailsProp); String typeName = new TypeNameProvider().getTypeName(currentGrailsProp,config, gormMapping); if ("serializable".equals(typeName)) { value = new BasicValue(metadataBuildingContext, table); @@ -2027,9 +2021,9 @@ public class GrailsDomainBinder implements MetadataContributor { private void bindEnumType(PersistentProperty property, Class<?> propertyType, SimpleValue simpleValue, String columnName) { - PropertyConfig pc = getPropertyConfig(property); + PropertyConfig pc = new PersistentPropertyToPropertyConfig().apply(property); final PersistentEntity owner = property.getOwner(); - PropertyConfig config = getPropertyConfig(property); + PropertyConfig config = new PersistentPropertyToPropertyConfig().apply(property); Mapping mapping1 = getMapping(owner); String typeName = new TypeNameProvider().getTypeName(property,config, mapping1); if (typeName == null) { @@ -2078,18 +2072,18 @@ public class GrailsDomainBinder implements MetadataContributor { simpleValue.addColumn(column); - PropertyConfig propertyConfig = getPropertyConfig(property); + PropertyConfig propertyConfig = new PersistentPropertyToPropertyConfig().apply(property); if (propertyConfig != null && !propertyConfig.getColumns().isEmpty()) { ColumnConfig columnConfig = propertyConfig.getColumns().get(0); new IndexBinder().bindIndex(columnName, column, columnConfig, t); - final PropertyConfig mappedForm = getPropertyConfig(property); + final PropertyConfig mappedForm = new PersistentPropertyToPropertyConfig().apply(property); new ColumnConfigToColumnBinder().bindColumnConfigToColumn(column, columnConfig, mappedForm); } } private Class<?> getUserType(PersistentProperty currentGrailsProp) { Class<?> userType = null; - PropertyConfig config = getPropertyConfig(currentGrailsProp); + PropertyConfig config = new PersistentPropertyToPropertyConfig().apply(currentGrailsProp); Object typeObj = config == null ? null : config.getType(); if (typeObj instanceof Class<?>) { userType = (Class<?>)typeObj; @@ -2281,7 +2275,7 @@ public class GrailsDomainBinder implements MetadataContributor { } else { if (property.isCircular() && (property instanceof ManyToMany)) { - PropertyConfig pc = getPropertyConfig(property); + PropertyConfig pc = new PersistentPropertyToPropertyConfig().apply(property); if (pc.getColumns().isEmpty()) { mapping.getColumns().put(property.getName(), pc); @@ -2301,7 +2295,7 @@ public class GrailsDomainBinder implements MetadataContributor { } } - PropertyConfig config = getPropertyConfig(property); + PropertyConfig config = new PersistentPropertyToPropertyConfig().apply(property); if ((property instanceof org.grails.datastore.mapping.model.types.OneToOne) && !isComposite) { manyToOne.setAlternateUniqueKey(true); Column c = getColumnForSimpleValue(manyToOne); @@ -2321,7 +2315,7 @@ public class GrailsDomainBinder implements MetadataContributor { PhysicalNamingStrategy namingStrategy = getPhysicalNamingStrategy(sessionFactoryBeanName); String[] propertyNames = compositeId.getPropertyNames(); - PropertyConfig config = getPropertyConfig(property); + PropertyConfig config = new PersistentPropertyToPropertyConfig().apply(property); List<ColumnConfig> columns = config.getColumns(); int i = columns.size(); @@ -2402,7 +2396,7 @@ public class GrailsDomainBinder implements MetadataContributor { private void bindOneToOne(final org.grails.datastore.mapping.model.types.OneToOne property, OneToOne oneToOne, String path, String sessionFactoryBeanName) { - PropertyConfig config = getPropertyConfig(property); + PropertyConfig config = new PersistentPropertyToPropertyConfig().apply(property); final Association otherSide = property.getInverseSide(); final boolean hasOne = isHasOne(otherSide); @@ -2426,7 +2420,7 @@ public class GrailsDomainBinder implements MetadataContributor { bindOneToOneInternal(property, oneToOne, path); if (hasOne) { - PropertyConfig pc = getPropertyConfig(property); + PropertyConfig pc = new PersistentPropertyToPropertyConfig().apply(property); bindSimpleValue(property, oneToOne, path, pc, sessionFactoryBeanName); } else { @@ -2441,7 +2435,7 @@ public class GrailsDomainBinder implements MetadataContributor { /** */ private void bindManyToOneValues(org.grails.datastore.mapping.model.types.Association property, ManyToOne manyToOne) { - PropertyConfig config = getPropertyConfig(property); + PropertyConfig config = new PersistentPropertyToPropertyConfig().apply(property); if (config != null && config.getFetchMode() != null) { manyToOne.setFetchMode(config.getFetchMode()); @@ -2596,7 +2590,7 @@ public class GrailsDomainBinder implements MetadataContributor { } AccessType accessType = AccessType.getAccessStrategy( - getPropertyConfig(grailsProperty).getAccessType() + new PersistentPropertyToPropertyConfig().apply(grailsProperty).getAccessType() ); if(accessType == AccessType.FIELD) { @@ -2635,7 +2629,7 @@ public class GrailsDomainBinder implements MetadataContributor { } private boolean getLaziness(PersistentProperty grailsProperty) { - PropertyConfig config = getPropertyConfig(grailsProperty); + PropertyConfig config = new PersistentPropertyToPropertyConfig().apply(grailsProperty); final Boolean lazy = config.getLazy(); if(lazy == null && grailsProperty instanceof Association) { return true; @@ -2647,12 +2641,12 @@ public class GrailsDomainBinder implements MetadataContributor { } private boolean getInsertableness(PersistentProperty grailsProperty) { - PropertyConfig config = getPropertyConfig(grailsProperty); + PropertyConfig config = new PersistentPropertyToPropertyConfig().apply(grailsProperty); return config == null || config.getInsertable(); } private boolean getUpdateableness(PersistentProperty grailsProperty) { - PropertyConfig config = getPropertyConfig(grailsProperty); + PropertyConfig config = new PersistentPropertyToPropertyConfig().apply(grailsProperty); return config == null || config.getUpdatable(); } @@ -2672,7 +2666,7 @@ public class GrailsDomainBinder implements MetadataContributor { String cascadeStrategy = "none"; // set to cascade all for the moment PersistentEntity domainClass = grailsProperty.getOwner(); - PropertyConfig config = getPropertyConfig(grailsProperty); + PropertyConfig config = new PersistentPropertyToPropertyConfig().apply(grailsProperty); if (config != null && config.getCascade() != null) { cascadeStrategy = config.getCascade(); LOG.debug("Cascade strategy for property ${grailsProperty.getName()} is ${cascadeStrategy}"); @@ -2770,7 +2764,7 @@ public class GrailsDomainBinder implements MetadataContributor { private void bindSimpleValue(PersistentProperty property, PersistentProperty parentProperty, SimpleValue simpleValue, String path, InFlightMetadataCollector mappings, String sessionFactoryBeanName) { // set type - bindSimpleValue(property,parentProperty, simpleValue, path, getPropertyConfig(property), sessionFactoryBeanName); + bindSimpleValue(property,parentProperty, simpleValue, path, new PersistentPropertyToPropertyConfig().apply(property), sessionFactoryBeanName); } private void bindSimpleValue(PersistentProperty grailsProp, SimpleValue simpleValue, @@ -2834,7 +2828,7 @@ public class GrailsDomainBinder implements MetadataContributor { private void setTypeForPropertyConfig(PersistentProperty grailsProp, SimpleValue simpleValue, PropertyConfig config) { Mapping mapping = getMapping(grailsProp.getOwner()); - final String typeName = new TypeNameProvider().getTypeName(grailsProp,getPropertyConfig(grailsProp), mapping); + final String typeName = new TypeNameProvider().getTypeName(grailsProp, new PersistentPropertyToPropertyConfig().apply(grailsProp), mapping); if (typeName == null) { simpleValue.setTypeName(grailsProp.getType().getName()); } @@ -2895,7 +2889,7 @@ public class GrailsDomainBinder implements MetadataContributor { else { column.setName(columnName); column.setNullable(property.isNullable() || (parentProperty != null && parentProperty.isNullable())); - PropertyConfig propertyConfig = getPropertyConfig(property); + PropertyConfig propertyConfig = new PersistentPropertyToPropertyConfig().apply(property); // Use the constraints for this property to more accurately define // the column's length, precision, and scale if (String.class.isAssignableFrom(property.getType()) || byte[].class.isAssignableFrom(property.getType())) { @@ -2985,7 +2979,7 @@ public class GrailsDomainBinder implements MetadataContributor { } else { if (supportsJoinColumnMapping(grailsProp)) { - PropertyConfig pc = getPropertyConfig(grailsProp); + PropertyConfig pc = new PersistentPropertyToPropertyConfig().apply(grailsProp); if (hasJoinKeyMapping(pc)) { columnName = pc.getJoinTable().getKey().getName(); } @@ -3025,7 +3019,7 @@ public class GrailsDomainBinder implements MetadataContributor { if (property instanceof Association) { Association association = (Association) property; boolean isBasic = property instanceof Basic; - if(isBasic && (getPropertyConfig(property)).getType() != null ) { + if (isBasic && (new PersistentPropertyToPropertyConfig().apply(property)).getType() != null) { return columnName; } @@ -3061,7 +3055,7 @@ public class GrailsDomainBinder implements MetadataContributor { } private String getIndexColumnName(PersistentProperty property, String sessionFactoryBeanName) { - PropertyConfig pc = getPropertyConfig(property); + PropertyConfig pc = new PersistentPropertyToPropertyConfig().apply(property); if (pc != null && pc.getIndexColumn() != null && pc.getIndexColumn().getColumn() != null) { return pc.getIndexColumn().getColumn(); } @@ -3070,7 +3064,7 @@ public class GrailsDomainBinder implements MetadataContributor { } private String getIndexColumnType(PersistentProperty property, String defaultType) { - PropertyConfig pc = getPropertyConfig(property); + PropertyConfig pc = new PersistentPropertyToPropertyConfig().apply(property); if (pc != null && pc.getIndexColumn() != null && pc.getIndexColumn().getType() != null) { PropertyConfig config = pc.getIndexColumn(); Mapping mapping = getMapping(property.getOwner()); @@ -3080,7 +3074,7 @@ public class GrailsDomainBinder implements MetadataContributor { } private String getMapElementName(PersistentProperty property, String sessionFactoryBeanName) { - PropertyConfig pc = getPropertyConfig(property); + PropertyConfig pc = new PersistentPropertyToPropertyConfig().apply(property); if (hasJoinTableColumnNameMapping(pc)) { return pc.getJoinTable().getColumn().getName(); @@ -3096,7 +3090,7 @@ public class GrailsDomainBinder implements MetadataContributor { private void handleUniqueConstraint(PersistentProperty property, Column column, String path, Table table, String columnName, String sessionFactoryBeanName) { - final PropertyConfig mappedForm = getPropertyConfig(property); + final PropertyConfig mappedForm = new PersistentPropertyToPropertyConfig().apply(property); if (mappedForm.isUnique()) { if (!mappedForm.isUniqueWithinGroup()) { column.setUnique(true); @@ -3331,7 +3325,7 @@ public class GrailsDomainBinder implements MetadataContributor { } public String getTypeName(ToMany property) { - PropertyConfig config = binder.getPropertyConfig(property); + PropertyConfig config = new PersistentPropertyToPropertyConfig().apply(property); Mapping mapping = getMapping(property.getOwner()); return new TypeNameProvider().getTypeName(property,config, mapping); } diff --git a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/PersistentPropertyToPropertyConfig.java b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/PersistentPropertyToPropertyConfig.java new file mode 100644 index 0000000000..810f6752ad --- /dev/null +++ b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/PersistentPropertyToPropertyConfig.java @@ -0,0 +1,17 @@ +package org.grails.orm.hibernate.cfg.domainbinding; + +import org.grails.datastore.mapping.model.PersistentProperty; +import org.grails.orm.hibernate.cfg.PropertyConfig; + +import java.util.Optional; +import java.util.function.Function; + +public class PersistentPropertyToPropertyConfig implements Function<PersistentProperty, PropertyConfig> { + @Override + public PropertyConfig apply(PersistentProperty persistentProperty) { + return Optional.ofNullable(persistentProperty) + .map(PersistentProperty::getMappedForm) + .map(PropertyConfig.class::cast) + .orElse(null); + } +}
