0

これに注釈を付けようとしています:

public class                        Keyword {
    @Id @GeneratedValue
    private Integer                 id;
    //Missing annotation
    private Map<Keyword, Integer>   keywordRelated;
}

この例を見つけましたが、リレーショナル モデルを提供しておらず、まったく同じモデルではありません。そして、彼らのテーブルがどのようになっているのかわかりません。

4

1 に答える 1

1

以下は、エンティティをキーとして持つ 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;
于 2013-02-03T19:08:28.727 に答える