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
The following commit(s) were added to refs/heads/8.0.x-hibernate7 by this push:
new 4f837a4f13 Issue 14716: H5 fix for this
4f837a4f13 is described below
commit 4f837a4f13718190e9a97c639752d1037e5b2886
Author: Walter Duque de Estrada <[email protected]>
AuthorDate: Mon May 18 21:43:29 2026 -0500
Issue 14716: H5 fix for this
---
.../orm/hibernate/cfg/GrailsDomainBinder.java | 13 +++++++-----
.../hibernate/cfg/HibernateMappingBuilder.groovy | 7 ++++++-
.../org/grails/orm/hibernate/cfg/JoinTable.groovy | 23 ++++++++++++++++++----
.../grails/orm/hibernate/cfg/PropertyConfig.groovy | 10 +++++++++-
.../mapping/HibernateMappingBuilderTests.groovy | 4 ++--
.../hibernate/mapping/MappingBuilderSpec.groovy | 4 ++--
.../CompositeKeyJoinTableIntegrationSpec.groovy | 1 -
7 files changed, 46 insertions(+), 16 deletions(-)
diff --git
a/grails-data-hibernate5/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java
b/grails-data-hibernate5/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java
index 1c5715728c..cfc0bae3d5 100644
---
a/grails-data-hibernate5/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java
+++
b/grails-data-hibernate5/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java
@@ -499,7 +499,8 @@ public class GrailsDomainBinder implements
MetadataContributor {
}
} else {
if (hasJoinKeyMapping(propConfig)) {
- bindSimpleValue("long", key, false,
propConfig.getJoinTable().getKey().getName(), mappings);
+ java.util.List<ColumnConfig> keys =
propConfig.getJoinTable().getKeys();
+ bindSimpleValue("long", key, false, keys.get(0).getName(),
mappings);
} else {
bindDependentKeyValue(property, key, mappings,
sessionFactoryBeanName);
}
@@ -2392,7 +2393,9 @@ public class GrailsDomainBinder implements
MetadataContributor {
final ColumnConfig columnConfig = new ColumnConfig();
columnConfig.setName(namingStrategy.propertyToColumnName(property.getName()) +
UNDERSCORE + FOREIGN_KEY_SUFFIX);
- jt.setKey(columnConfig);
+ java.util.List<ColumnConfig> keys = new
java.util.ArrayList<>();
+ keys.add(columnConfig);
+ jt.setKeys(keys);
pc.setJoinTable(jt);
}
bindSimpleValue(property, manyToOne, path, pc,
sessionFactoryBeanName);
@@ -3143,7 +3146,7 @@ public class GrailsDomainBinder implements
MetadataContributor {
PropertyConfig c = m.getPropertyConfig(grailsProp.getName());
if (supportsJoinColumnMapping(grailsProp) &&
hasJoinKeyMapping(c)) {
- columnName = c.getJoinTable().getKey().getName();
+ columnName = c.getJoinTable().getKeys().get(0).getName();
}
else if (c != null && c.getColumn() != null) {
columnName = c.getColumn();
@@ -3154,7 +3157,7 @@ public class GrailsDomainBinder implements
MetadataContributor {
if (supportsJoinColumnMapping(grailsProp)) {
PropertyConfig pc = getPropertyConfig(grailsProp);
if (hasJoinKeyMapping(pc)) {
- columnName = pc.getJoinTable().getKey().getName();
+ columnName = pc.getJoinTable().getKeys().get(0).getName();
}
else {
columnName = cc.getName();
@@ -3177,7 +3180,7 @@ public class GrailsDomainBinder implements
MetadataContributor {
}
protected boolean hasJoinKeyMapping(PropertyConfig c) {
- return c != null && c.getJoinTable() != null &&
c.getJoinTable().getKey() != null;
+ return c != null && c.getJoinTable() != null &&
c.getJoinTable().getKeys() != null && !c.getJoinTable().getKeys().isEmpty();
}
protected boolean supportsJoinColumnMapping(PersistentProperty grailsProp)
{
diff --git
a/grails-data-hibernate5/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateMappingBuilder.groovy
b/grails-data-hibernate5/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateMappingBuilder.groovy
index b7d7e55b00..4e9ac40c95 100644
---
a/grails-data-hibernate5/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateMappingBuilder.groovy
+++
b/grails-data-hibernate5/core/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateMappingBuilder.groovy
@@ -588,7 +588,12 @@ class HibernateMappingBuilder implements
MappingConfigurationBuilder<Mapping, Pr
if (joinArgs.catalog) join.catalog =
joinArgs.remove('catalog')
if (joinArgs.name) join.name = joinArgs.remove('name')
if (joinArgs.key) {
- join.key = new ColumnConfig(name:
joinArgs.remove('key'))
+ def keyVal = joinArgs.remove('key')
+ if (keyVal instanceof Collection ||
keyVal.getClass().isArray()) {
+ join.keys(keyVal as List)
+ } else {
+ join.key(keyVal.toString())
+ }
}
if (joinArgs.column) {
ColumnConfig cc = new ColumnConfig(name:
joinArgs.column)
diff --git
a/grails-data-hibernate5/core/src/main/groovy/org/grails/orm/hibernate/cfg/JoinTable.groovy
b/grails-data-hibernate5/core/src/main/groovy/org/grails/orm/hibernate/cfg/JoinTable.groovy
index c3bc008128..45cfb36128 100644
---
a/grails-data-hibernate5/core/src/main/groovy/org/grails/orm/hibernate/cfg/JoinTable.groovy
+++
b/grails-data-hibernate5/core/src/main/groovy/org/grails/orm/hibernate/cfg/JoinTable.groovy
@@ -36,9 +36,24 @@ import groovy.transform.builder.SimpleStrategy
class JoinTable extends Table {
/**
- * The foreign key column
+ * The foreign key columns (composite key support)
*/
- ColumnConfig key
+ List<ColumnConfig> keys = []
+
+ void setKeys(List<ColumnConfig> keys) {
+ this.keys = keys
+ }
+
+ /**
+ * Configures the keys
+ * @param names The key names
+ * @return This join table config
+ */
+ JoinTable keys(List names) {
+ this.keys = (List<ColumnConfig>) names.collect { it instanceof
ColumnConfig ? it : new ColumnConfig(name: it.toString()) }
+ return this
+ }
+
/**
* The child id column
*/
@@ -50,7 +65,7 @@ class JoinTable extends Table {
* @return This join table config
*/
JoinTable key(@DelegatesTo(ColumnConfig) Closure columnConfig) {
- key = ColumnConfig.configureNew(columnConfig)
+ keys = [ColumnConfig.configureNew(columnConfig)]
return this
}
/**
@@ -69,7 +84,7 @@ class JoinTable extends Table {
* @return This join table config
*/
JoinTable key(String columnName) {
- key = new ColumnConfig(name: columnName)
+ keys = [new ColumnConfig(name: columnName)]
return this
}
diff --git
a/grails-data-hibernate5/core/src/main/groovy/org/grails/orm/hibernate/cfg/PropertyConfig.groovy
b/grails-data-hibernate5/core/src/main/groovy/org/grails/orm/hibernate/cfg/PropertyConfig.groovy
index 77c36e15a0..fcab77a84f 100644
---
a/grails-data-hibernate5/core/src/main/groovy/org/grails/orm/hibernate/cfg/PropertyConfig.groovy
+++
b/grails-data-hibernate5/core/src/main/groovy/org/grails/orm/hibernate/cfg/PropertyConfig.groovy
@@ -232,7 +232,11 @@ class PropertyConfig extends Property {
DataBinder dataBinder = new DataBinder(joinTable)
dataBinder.bind(new MutablePropertyValues(joinTableDef))
if (joinTableDef.key) {
- joinTable.key(joinTableDef.key.toString())
+ if (joinTableDef.key instanceof Collection ||
joinTableDef.key.getClass().isArray()) {
+ joinTable.keys(joinTableDef.key as List)
+ } else {
+ joinTable.key(joinTableDef.key.toString())
+ }
}
if (joinTableDef.column) {
joinTable.column(joinTableDef.column.toString())
@@ -472,4 +476,8 @@ class PropertyConfig extends Property {
}
return pc
}
+
+ boolean hasJoinKeyMapping() {
+ joinTable?.keys
+ }
}
diff --git
a/grails-data-hibernate5/core/src/test/groovy/grails/gorm/hibernate/mapping/HibernateMappingBuilderTests.groovy
b/grails-data-hibernate5/core/src/test/groovy/grails/gorm/hibernate/mapping/HibernateMappingBuilderTests.groovy
index 284a0af7d1..342cc44b93 100644
---
a/grails-data-hibernate5/core/src/test/groovy/grails/gorm/hibernate/mapping/HibernateMappingBuilderTests.groovy
+++
b/grails-data-hibernate5/core/src/test/groovy/grails/gorm/hibernate/mapping/HibernateMappingBuilderTests.groovy
@@ -380,7 +380,7 @@ class HibernateMappingBuilderTests {
property = mapping.getPropertyConfig('things')
assert property?.joinTable
assertEquals "foo", property.joinTable.name
- assertEquals "foo_id", property.joinTable.key.name
+ assertEquals "foo_id", property.joinTable.keys[0].name
assertEquals "bar_id", property.joinTable.column.name
}
@@ -408,7 +408,7 @@ class HibernateMappingBuilderTests {
property = mapping.getPropertyConfig('things')
assert property?.joinTable
assertEquals "foo", property.joinTable.name
- assertEquals "foo_id", property.joinTable.key.name
+ assertEquals "foo_id", property.joinTable.keys[0].name
assertEquals "bar_id", property.joinTable.column.name
}
diff --git
a/grails-data-hibernate5/core/src/test/groovy/grails/gorm/hibernate/mapping/MappingBuilderSpec.groovy
b/grails-data-hibernate5/core/src/test/groovy/grails/gorm/hibernate/mapping/MappingBuilderSpec.groovy
index 876bbcd3c8..afea25aa23 100644
---
a/grails-data-hibernate5/core/src/test/groovy/grails/gorm/hibernate/mapping/MappingBuilderSpec.groovy
+++
b/grails-data-hibernate5/core/src/test/groovy/grails/gorm/hibernate/mapping/MappingBuilderSpec.groovy
@@ -259,7 +259,7 @@ class MappingBuilderSpec extends Specification {
config != null
config.joinTable != null
config.joinTable.name == 'foo'
- config.joinTable.key.name == 'foo_id'
+ config.joinTable.keys[0].name == 'foo_id'
config.joinTable.column.name == 'bar_id'
}
@@ -280,7 +280,7 @@ class MappingBuilderSpec extends Specification {
config != null
config.joinTable != null
config.joinTable.name == 'foo'
- config.joinTable.key.name == 'foo_id'
+ config.joinTable.keys[0].name == 'foo_id'
config.joinTable.column.name == 'bar_id'
}
diff --git
a/grails-data-hibernate5/core/src/test/groovy/grails/gorm/specs/CompositeKeyJoinTableIntegrationSpec.groovy
b/grails-data-hibernate5/core/src/test/groovy/grails/gorm/specs/CompositeKeyJoinTableIntegrationSpec.groovy
index 16ad4e010c..267c09c954 100644
---
a/grails-data-hibernate5/core/src/test/groovy/grails/gorm/specs/CompositeKeyJoinTableIntegrationSpec.groovy
+++
b/grails-data-hibernate5/core/src/test/groovy/grails/gorm/specs/CompositeKeyJoinTableIntegrationSpec.groovy
@@ -32,7 +32,6 @@ class CompositeKeyJoinTableIntegrationSpec extends
HibernateGormDatastoreSpec {
expect:
joinTable.keys*.name == ['a_col', 'b_col']
- joinTable.getKey().name == 'a_col'
joinTable.column.name == 'c'
}