2011-09-23 19 views
11

私はPersonがエンティティであるエンティティクラス、内部エンティティクラスに<String、Person>マップを追加する方法は?

Map<String, Person> personMap; 

としてマッピングを追加します。 Mapは、Stringに対応する正確なPerson(その人のニックネームにする)を特定することです。同じ人物は異なる名前を持つことがあり、名前のいずれかが与えられたときはいつも同じPersonが見つかるはずです。

使用される永続性APIはJPAで、プロバイダはEclipseLinkです。どのようなアノテーションを使用すればよいのですか?

答えて

15

JSR-317のセクション2.7によると、マップの値がエンティティ(あなたの場合)であれば、結合テーブルが作成されてからOneToMany/ManyToOneアノテーションが使用されます。

キーについては、基本タイプの場合は、@MapKeyColumnを使用してキーのマッピング列をカスタマイズできます。だからここにあなたの例の私の感想です:

EDITED
@OneToMany 
@MapKeyColumn(name="person_nickname") 
Map<String, Person> personMap; 

いくつかのテストの後、次はかなりうまく動作するようです:

@ElementCollection 
@CollectionTable(name="<name_of_join_table>") 
@MapKeyColumn(name="<name_of_map_key_in_table>") 
Map<String, Person> personMap; 

上記の3つのフィールドで結合テーブルを生成し、 1つはマッピングホルダーid、1つはキー、もう1つは値です。

+0

素晴らしい機能はありますが、マップされたアイテムをマップに読み込むときに自動フェッチが機能しません。 – sealskej

関連する問題