以下僅告訴我們如何映射那些確實有一個實體作爲關鍵的Map(大概情況可能是有更好的解決方案,比如帶有比率的中間對象)。
@ElementCollection是爲映射這樣一個集合而設計的。當值不是實體時,@OneToMany不能使用。
默認情況下,下面的映射
@ElementCollection
private Map<Keyword, Integer> keywordRelated;
映射到下面的數據庫表(假設表爲關鍵字實體名稱爲關鍵字,並通過@表的註釋不受影響):
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;
爲什麼相關的關鍵字會出現在地圖中,而不僅僅是列表中,例如列表有關聯? –
Rob
因爲我需要存儲一個比例,我用Integer存儲它。無論如何,我想知道如何做到這一點,即使它不是最好的設計。 – daJu
看@mappedBy。如果你需要存儲一個比例,你需要一個關聯類。 – Rob