我有一個非常基本的多對多的關係:人與項目,設置如下:如何設置與JPA/Hibernate的基本manytomany關係?
人:
@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中。
這適用於一個人。如果我添加一個新的項目,它將與Person一起保存並且數據庫中的表正確更新。但是,如果我然後爲另一個人添加相同的項目 - 它將從第一個人中刪除!第一個人的id被替換爲連接表中第二個人的id。
這是什麼原因造成的?我的關係設置不正確?
有趣。我從Pro Spring 3 Book的例子中得到了這樣一個想法:它的確是這樣做的:兩邊只有交換的列相同的映射。我在網上找不到類似的例子,但我確實發現了幾個頁面提到雙向關係需要「mappedBy」,而單向關係在反面沒有註釋。我仍然有些困惑。 – wannabeartist 2013-03-13 19:02:36