2

私は非常に基本的な多対多の関係を持っています:人とプロジェクト、次のように設定します:

人:

@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name = "person_project", 
joinColumns = @JoinColumn(name = "Person_Id"),
inverseJoinColumns = @JoinColumn(name = "Project_id"))
private Set<Project> projects = new HashSet<Project>();

計画:

@ManyToMany
@JoinTable(name = "person_project", 
joinColumns = @JoinColumn(name = "Project_Id"), 
inverseJoinColumns = @JoinColumn(name = "Person_id"))
private Set<Person> persons = new HashSet<Person>();

個人を更新するときに、新しいプロジェクトが指定される場合があります。Person用にJPARepositoryを設定し、saveAndFlush(...)を使用してPersonで可能な新しいプロジェクトを保存します。

これは1人で機能します。新しいプロジェクトを追加すると、Personとともに保存され、データベース内のテーブルが正しく更新されます。ただし、同じプロジェクトを別の人に追加すると、最初の人から削除されます。結合テーブルでは、最初の人のIDが2番目の人のIDに置き換えられます。

これの原因は何ですか?私の関係の設定は間違っていますか?

4

2 に答える 2

3

マッピングの両方の半分で同じアノテーションを使用しないでください。最初の部分は、結合テーブルと列を定義します。マッピングの後半は、残りの半分(この場合はプロジェクト)の名前を知っているだけでよく、最初の注釈から詳細を取得します。適切な説明については、「多対多のマッピングを休止状態にする」を参照してください。

于 2013-03-13T15:45:04.587 に答える
0

次のようにプロジェクトを変更すると、問題が修正されるようです。

@ManyToMany(mappedBy="projects")
private Set<Person> persons = new HashSet<Person>();

同じプロジェクトを2人目の人に追加すると、最初のプロジェクトはそのプロジェクトに関連付けられたままになります。

なぜこれが機能するのかまだわかりませんので、誰かが説明できるなら、やってください!

于 2013-03-13T12:20:02.663 に答える