我有一个无法更改的旧数据库,并且我有这个设置
class Foo {
static hasMany = [bars:Bar]
static mapping = {
version false
columns {
id column: "FooId"
color column: "FooColor"
bars joinTable: [name: "FooBar", key: 'FooId', column: 'BarId']
}
transient
def getBarName(){
((Bar)this.bars.toArray()[0]).name
}
}
class Bar {
static hasMany = [foos:Foo]
static belongsTo = [Foo, Baz]
static mapping = {
version false
columns {
id column: "BarId"
name column: "BarName"
}
}
当我尝试访问控制器中的方法 getBarName() 时,Hibernate 会将反列名称转换为“bar_id”。是否有某种方法可以设置像 id 和 property 列的映射?
顺便说一句。如何正确实现 getBarName()?这不可能是正确的实现......
*编辑*
----------------------------------------------------------- ------------------------------------
显然我上面不清楚。问题是我已经有一个连接列,其形式为
-------------------
|RowId|FooId|BarId|
-------------------
| 1 | abc | 123 |
-------------------
Benoit 的答案在这种情况下并不适用,因为我想避免为 joinTable 提供域对象。
*编辑 2 *
---------------------------------------------- ------------------------
解决了。虽然不明白...但是在两个域类之间拆分连接表信息并且它可以工作...
class Foo {
static hasMany = [bars:Bar]
static mapping = {
version false
columns {
id column: "FooId"
color column: "FooColor"
bars joinTable: [name: "FooBar", key: 'FooId']
}
transient
def getBarName(){
((Bar)this.bars.toArray()[0]).name
}
}
class Bar {
static hasMany = [foos:Foo]
static belongsTo = [Foo, Baz]
static mapping = {
version false
columns {
id column: "BarId"
name column: "BarName"
bars joinTable: [name: "FooBar", key: 'BarId']
}
}