这很混乱,但我最终通过创建另一个包含对原始类的引用的域类来解决这个问题。我想找到一种更好的方法,但这暂时可行。
我正在测试的数据库表:
mysql> desc t_foo;
+-------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| I | bigint(20) | NO | PRI | NULL | |
| Description | varchar(45) | YES | | NULL | |
| I_CHILDFOO | bigint(20) | YES | | NULL | |
+-------------+-------------+------+-----+---------+-------+
mysql> select * from t_foo;
+---+--------------+------------+
| I | Description | I_CHILDFOO |
+---+--------------+------------+
| 1 | Parent 1 | NULL |
| 2 | Parent 2 | NULL |
| 3 | Child 1 of 1 | 1 |
| 4 | Child 1 of 1 | 1 |
| 5 | Child 1 of 2 | 2 |
+---+--------------+------------+
我的课程如下所示:
package db.legacy
class Foo {
long instanceId
String info
static hasMany = [ kids: ChildFoo ]
static constraints = {
}
static mapping = {
table 'T_FOO'
id generator: 'assigned', name: 'instanceId', column: 'I', type: 'long'
version false
autoTimestamp false
instanceId column: 'I'
info column: 'Description'
kids column: 'I_CHILDFOO'
}
}
class ChildFoo {
long instanceId
Foo parentFoo
static mapping = {
table 'T_FOO'
id generator: 'assigned', name: 'instanceId', column: 'I', type: 'long'
version false
autoTimestamp false
instanceId column: 'I'
parentFoo column: 'I_CHILDFOO'
}
}
当我进行以下测试时,效果很好:
def foo = db.legacy.Foo.get(1)
foo.kids.each { bar ->
assert bar.parentFoo.instanceId == foo.instanceId
}
这似乎是一个草率 / hacky 的解决方案。如果有人有任何想法或想法,我很想听听他们的意见。
谢谢