以下は、エンティティをキーとして持つ Map をマップする方法のみを示しています (場合によっては、比率を持つ中間オブジェクトなど、より良い解決策がある可能性があります)。
@ElementCollectionは、そのようなコレクションをマッピングするために設計されています。値がエンティティでない場合、@OneToMany は使用できません。
デフォルトでは次のマッピング
@ElementCollection
private Map<Keyword, Integer> keywordRelated;
データベース内の次のテーブルにマップします (Keyword エンティティのテーブルの名前が Keyword であり、@Table-annotation による影響を受けないと仮定します):
Keyword_KEYWORDRELATED (
Keyword_ID (PK, FK to Keyword ID),
KEYWORDRELATED ,
keywordRelated_KEY (FK to Keyword ID)
)
データベースのテーブルと列のデフォルトの名前付けが不十分な場合は、次のようにカスタマイズできます。
@ElementCollection
@CollectionTable(name= "keyword_to_related_keyword")
@Column(name="ratio")
@MapKeyColumn(name="related_keyword_id")
@MapKeyJoinColumn(name="some_other_preferred_name")
public Map<Keyword, Integer> keywordRelated;