2013-02-03 70 views
0

我想這個註釋:JPA註釋地圖與Hibernate和最佳關係模型

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

我發現這個example,但他們不提供關係模型,它不是完全一樣的模式。我無法弄清楚他們的桌子是怎麼樣的。

+0

爲什麼相關的關鍵字會出現在地圖中,而不僅僅是列表中,例如列表有關聯? – Rob

+0

因爲我需要存儲一個比例,我用Integer存儲它。無論如何,我想知道如何做到這一點,即使它不是最好的設計。 – daJu

+0

看@mappedBy。如果你需要存儲一個比例,你需要一個關聯類。 – Rob

回答

1

以下僅告訴我們如何映射那些確實有一個實體作爲關鍵的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; 
+0

能否請你給我一個這些註釋將做的數據庫表的快速草圖。 – daJu