剩餘關係的錯誤,我在JPA定義了兩個實體:員工和技能。JPA - @ManyToMany雙向關係,在反側去除實體,並與JoinTable
這個實體之間是定義關係@ManyToMany。
public class Employee {
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "employee_skill",
joinColumns = @JoinColumn(name = "employee_id"),
inverseJoinColumns = @JoinColumn(name = "skill_id")
)
private Set<Skill> skills = new HashSet<>();
}
public class Skill {
@ManyToMany(mappedBy = "skills", fetch = FetchType.LAZY)
private Set<Employee> skilledEmployees = new HashSet<>();
}
現在我有這樣的問題: 如果我使用實體管理器刪除技能實體。它刪除確定。但是在@JoinTable在數據庫employee_skill仍然與此刪除的實體(它的ID)的關聯。
我不想刪除員工當我刪除技能所以所有級聯刪除或orphanRemoval是沒有用在這裏。
我想爲什麼這種關係不會自動從數據庫中刪除。當這個關聯在連接表中仍然會給我javax.persistence.EntityNotFoundException:無法找到...
所以我可以在刪除Skill實體之前手動刪除此關聯。但是這是否是最佳做法?
刪除@ManyToMany雙向關係中實體的最佳做法是什麼?當移除像Employee或Skill這樣的實體不應該影響另一個實體嗎?
設置關係的雙方是唯一真正的方法...既然你選擇了一個雙向關係 –
你的意思是不確定? like for employee:skill.getEmployees(){employee.remove(skill); }確實從db –
中刪除技能實體時。 「設置」意味着在傳遞到持久機制之前(即在刷新,提交之前)使兩個集合保持一致。你應該怎麼做所有的雙向關係 –