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