1

Gorm でマッピングしたい 1 対多の関係があり、バッキング コレクションは Strings-to-Objects のマップです (既定のセットではなく)。grails doc hereでは、次の例が示されています。

class Book {
    Map authors

    static hasMany = [authors: Author]
}

def a = new Author(name:"Stephen King")

def book = new Book()
book.authors = [stephen:a]
book.save()

これは私が望むものにかなり近いですが、静かではありません。これが行うことは、任意の文字列「stephen」を、この関係の他のマッピング情報とともに、他の Book データとは別の結合テーブルに格納することです。Gorm がこのオブジェクトをデータベースからリロードすると、この保存された値が読み取られ、マップ内のキーとして使用されます。

私が欲しいのは、Hibernate の @MapKey のようなもので、マップ キーとして使用する値オブジェクトのプロパティを指定できます。そうすれば、追加のテーブルはなく、マップの値は保存時にデータベースに永続化され (キーは冗長な情報であるため、保存時にほとんど無視されます)、コレクションがデータベースから読み込まれると、そのプロパティは次のようになります。オブジェクトから読み取られ、マップ キーとして使用されます。

マップキーがオブジェクトに保存されたデータに基づいている場合、マップキー列を値オブジェクトで最新に保つ作業を行う必要がないため、これはよりクリーンなようです。この場合、作成者の名が「stephen」から「steve」に変更された場合、オブジェクトを更新し、別のキーで再保存する必要があります。

これはゴームで可能ですか?

4

0 に答える 0