0

ユーザーはこれらを持っています:

@ManyToMany(mappedBy = "votedDownBy")
private Set<Foo> votedDown =new HashSet<Foo>();

@ManyToMany(mappedBy = "favouritedBy")
private Set<Foo> favourites = new HashSet<Foo>();

対応する Foo には次のものがあります。

@ManyToMany
private Set<User> votedDownBy = new HashSet<User>();

@ManyToMany
private Set<User> favouritedBy = new HashSet<User>();

展開するときに、votedDownBy_id にデフォルト値が提供されていません ... 理由がわかりません。

4

2 に答える 2

0

各マッピングに結合テーブルを追加するだけで修正され、foo クラスは次のようになります。

@ManyToMany
@JoinTable(name="user_foo_vote_down")
private Set<User> votedDownBy = new HashSet<User>();

@ManyToMany
@JoinTable(name="user_foo_favourite")
private Set<User> favouritedBy = new HashSet<User>();
于 2013-01-29T09:34:07.927 に答える
0

@ManyToManyマッピングは結合テーブルを使用して行われます。あなたの場合、Foo_Userこれらのマッピングを持つテーブルが必要です。つまり、Foo_idaUser_idと列です。(Foo_idUser_idをそれぞれの主キーに置き換えます。また、とのテーブルはどこにあるFoo_UserTable1_Table2に置き換えます)Table1FooTable2User

@JoinTable注釈を使用して、これらのデフォルトをオーバーライドできます。

@ManyToMany(mappedBy = "votedDownBy")
@JoinTable(name="User_Foo_Votedown", 
            joinColumns={@JoinColumn(name="User_ID")}, 
            inverseJoinColumns={@JoinColumn(name="Foo_id")})
private Set<Foo> votedDown =new HashSet<Foo>();

@ManyToMany(mappedBy = "favouritedBy")
@JoinTable(name="User_Foo_Fav", 
            joinColumns={@JoinColumn(name="User_ID")}, 
            inverseJoinColumns={@JoinColumn(name="Foo_id")})
private Set<Foo> favourites = new HashSet<Foo>();

@ManyToMany(mappedBy = "votedDown")
private Set<User> votedDownBy = new HashSet<User>();

@ManyToMany(mappedBy = "favorites")
private Set<User> favouritedBy = new HashSet<User>();

これは対称的な双方向の関係であるため、mappedBy注釈を inUserJoinTableinに入れることもできます。Foo

于 2013-01-28T17:18:19.223 に答える