2017-05-28 17 views
0

私は結合テーブルによってマップされたリストを持っています。私がしなければならないことは、「レイアウト」と「ビュー」の組み合わせをユニークでなく、それぞれにインデックスを付けることです。私がしようと思ったのは、Map<Integer, View>を作成し、どうにかしてjoinテーブルに3番目のカラム '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

このIntegerは何ですか?ビューの順序を保持するだけですか?そうでない場合、それは何のためですか?また、intはプリミティブ型です。ジェネリック型としては使用できません。 –

+0

はい、マップ内のintについて申し訳ありません。私はInteger ofcourseを使用します。 それは何のために - 私はレイアウトを複数の同じビューにすることができるように、順序を変更することができ、またそれをユニークなキーとして持つことができる必要があります。 –

+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を参照してください。

本当に必要なら、オリジナルのアイデアをマップで実装する方法についても同じドキュメントで説明しています。

関連する問題