2017-05-28 109 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

同样的文档也描述了如何实现你的原创想法与地图,如果你真的想这样做。