12
想象一下以下機型:如何在Spring JPA中保存引用現有實體的新實體?
員工:
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "employee_project", joinColumns = @JoinColumn(name = "Emp_Id"), inverseJoinColumns = @JoinColumn(name = "Proj_id"))
private Set<Project> projects = new HashSet<Project>();
項目:
@ManyToMany(mappedBy = "projects")
private Set<Employee> employees = new HashSet<Employee>();
現在,如果我創建一個新的員工是指現有的項目,並嘗試堅持該員工,我得到一個錯誤:
detached entity passed to persist: Project
我創造了就業飴如下:
public void createNewEmployee(EmployeeDTO empDTO) {
Employee emp = new Employee();
// add stuff from DTO, including projects
repository.saveAndFlush(emp); // FAILS
}
,我更新現有的像這樣:
public void updateEmployee(EmployeeDTO empDTO) {
Employee emp = repository.findOne(empDTO.getId());
// set stuff from DTO, including projects
repository.saveAndFlush(emp); // WORKS!
}
謝謝,這是有效的,但我仍然想知道爲什麼我的更新方法沒有從他們的存儲庫中獲取項目(請參閱我更新的問題的詳細信息) – wannabeartist 2013-04-11 08:48:56
在此處擴展問題並不是一個好主意,因爲它們使某種程度上的答案。最好提出新的問題。我會相應地更新我的答案。 – 2013-04-11 10:13:29
那是春天的'@ Transactional'還是JPA?還是它重要? – CorayThan 2014-10-31 07:01:02