2017-05-28 89 views
0

我有一個連接表映射的列表。我需要做的是使「佈局」和「視圖」的組合不是唯一的,並且每個都有一個索引。我想要做的是做一個Map<Integer, View>,並以某種方式使連接表有第三列「ID」。會發生什麼是獲取該佈局的視圖,並使用連接表中的ID作爲地圖中的鍵填充它們。JPA映射映射到3列連接表

任何想法如何做到這一點,或者可能是一個更好的想法,我需要什麼?

@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) 
@JoinTable(
    name = "layout_view", 
    joinColumns = {@JoinColumn(name = "layout_id", nullable = false)}, 
    inverseJoinColumns = {@JoinColumn(name = "view_id", nullable = false)} 
) 
private List<View> views; 

我想什麼:

@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) 
@JoinTable(
    name = "layout_view", 
    joinColumns = {@JoinColumn(name = "layout_id", nullable = false)}, 
    inverseJoinColumns = {@JoinColumn(name = "view_id", nullable = false)} 
    //some code for third column and populating it as keys 
) 
private Map<Integer, View> views; 
+0

這是什麼整數?僅僅是爲了維護觀點的順序?如果不是,它是爲了什麼?另外,int是一個原始類型。您不能將其用作通用類型。 –

+0

是的,抱歉地圖中的int。我會使用Integer of course。 至於它是什麼 - 我需要能夠改變順序,並把它作爲唯一的鍵,所以我可以有多個相同的視圖的佈局。 –

+1

您可以像使用List一樣使用一個佈局已經有多個相同的視圖。要保存(並能夠更改)訂單,請參閱https://docs.oracle.com/javaee/7/api/javax/persistence/OrderColumn.html和https://docs.jboss.org/hibernate/orm /current/userguide/html_single/Hibernate_User_Guide.html#collections-list。同樣的文檔也描述瞭如果你真的想要的話,如何用地圖實現你的原創想法。 –

回答

1

您可以通過使用列表已經有一個多佈局相同的看法,你在幹什麼。

要保存(並能夠更改)訂單,請參閱OrderColumnHibernate documentation about ordered lists

同樣的文檔也描述瞭如何實現你的原創想法與地圖,如果你真的想這樣做。