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」に変更された場合、オブジェクトを更新し、別のキーで再保存する必要があります。
これはゴームで可能ですか?