0

変更できないレガシーデータベースがあり、このセットアップがあります

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']
    }
 }
4

1 に答える 1

0

ドキュメント多対一/一対一マッピングおよび一対多マッピングに記載されているように:

双方向の 1 対多では、1 対 1 の関連付けに関する前のセクションの例に従って、関連付けの多側で列名を変更することにより、使用される外部キー列を変更できます。ただし、一方向の関連付けでは、関連付け自体で外部キーを指定する必要があります。

与えられた例は次のとおりです。

class Person {
String firstName
static hasMany = [addresses: Address]
static mapping = {
        table 'people'
        firstName column: 'First_Name'
        addresses column: 'Person_Address_Id'
    }
}
于 2012-12-06T17:45:47.590 に答える