Skip to content

Commit d19815b

Browse files
committed
fix for GRAILS-7173 "Cannot define schema name for table used in joinTable mapping"
1 parent 86941df commit d19815b

File tree

4 files changed

+21
-2
lines changed

4 files changed

+21
-2
lines changed

grails-hibernate/src/main/groovy/org/codehaus/groovy/grails/orm/hibernate/cfg/GrailsDomainBinder.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1179,9 +1179,22 @@ private static void bindCollectionTable(GrailsDomainClassProperty property, Mapp
11791179
Collection collection, Table ownerTable, String sessionFactoryBeanName) {
11801180

11811181
String prefix = ownerTable.getSchema();
1182+
PropertyConfig config = getPropertyConfig(property);
1183+
JoinTable jt = config != null ? config.getJoinTable() : null;
1184+
11821185
String tableName = (prefix == null ? "" : prefix + '.') + calculateTableForMany(property, sessionFactoryBeanName);
1186+
String schemaName = mappings.getSchemaName();
1187+
String catalogName = mappings.getCatalogName();
1188+
if(jt != null) {
1189+
if(jt.getSchema() != null) {
1190+
schemaName = jt.getSchema();
1191+
}
1192+
if(jt.getCatalog() != null) {
1193+
catalogName = jt.getCatalog();
1194+
}
1195+
}
11831196
collection.setCollectionTable(mappings.addTable(
1184-
mappings.getSchemaName(), mappings.getCatalogName(),
1197+
schemaName, catalogName,
11851198
tableName, null, false));
11861199
}
11871200

grails-hibernate/src/main/groovy/org/codehaus/groovy/grails/orm/hibernate/cfg/HibernateMappingBuilder.groovy

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,8 @@ class HibernateMappingBuilder {
481481
join.name = joinArgs
482482
}
483483
else if (joinArgs instanceof Map) {
484+
if (joinArgs.schema) join.schema = joinArgs.remove('schema')
485+
if (joinArgs.catalog) join.catalog = joinArgs.remove('catalog')
484486
if (joinArgs.name) join.name = joinArgs.remove('name')
485487
if (joinArgs.key) {
486488
join.key = new ColumnConfig(name:joinArgs.remove('key'))

grails-hibernate/src/main/groovy/org/codehaus/groovy/grails/orm/hibernate/cfg/JoinTable.groovy

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ package org.codehaus.groovy.grails.orm.hibernate.cfg
99
*/
1010
class JoinTable {
1111
String name
12+
String catalog
13+
String schema
1214
ColumnConfig key
1315
ColumnConfig column
1416
}

grails-test-suite-persistence/src/test/groovy/org/codehaus/groovy/grails/orm/hibernate/HibernateMappingBuilderTests.groovy

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -330,13 +330,15 @@ class HibernateMappingBuilderTests extends GroovyTestCase {
330330

331331
mapping = builder.evaluate {
332332
columns {
333-
things joinTable:[name:'foo', key:'foo_id', column:'bar_id']
333+
things joinTable:[name:'foo', key:'foo_id', column:'bar_id', schema: 'foos', catalog: 'bars']
334334
}
335335
}
336336

337337
property = mapping.getPropertyConfig('things')
338338
assert property?.joinTable
339339
assertEquals "foo", property.joinTable.name
340+
assertEquals "foos", property.joinTable.schema
341+
assertEquals "bars", property.joinTable.catalog
340342
assertEquals "foo_id", property.joinTable.key.name
341343
assertEquals "bar_id", property.joinTable.column.name
342344
}

0 commit comments

Comments
 (0)