変更できないレガシーデータベースがあり、このセットアップがあります
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 列とプロパティ列のようなマッピングを設定する方法はありますか?
余談ですが。getBarName() を正しく実装するにはどうすればよいですか? それはおそらく正しい実装ではありません...
*編集*
--------------------------------------------------- -----------------------
どうやら上記でわかりにくかったようです。事は、私はすでにフォームを持つ結合列を持っているということです
-------------------
|RowId|FooId|BarId|
-------------------
| 1 | abc | 123 |
-------------------
joinTable のドメイン オブジェクトを持たないようにしたいので、この状況ではBenoit の答えは実際には当てはまりません。
*編集 2 *
---------------------------------------------- ------------------------
解決しました。理解できませんが...しかし、結合テーブル情報を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']
}
}