Stellen Sie sich die folgenden Modelle:Wie speichert man eine neue Entität, die eine vorhandene Entität in Spring JPA verweist?
Mitarbeiter:
@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>();
Projekt:
@ManyToMany(mappedBy = "projects")
private Set<Employee> employees = new HashSet<Employee>();
Nun, wenn ich einen neuen Mitarbeiter schaffen, die zu einem bestehenden Projekt bezieht und versuchen, diese Mitarbeiter zu beharren, ich Fehler erhalten:
detached entity passed to persist: Project
Ich erstelle den Mitarbeiter Yee wie folgt:
public void createNewEmployee(EmployeeDTO empDTO) {
Employee emp = new Employee();
// add stuff from DTO, including projects
repository.saveAndFlush(emp); // FAILS
}
und ich so bestehende aktualisieren:
public void updateEmployee(EmployeeDTO empDTO) {
Employee emp = repository.findOne(empDTO.getId());
// set stuff from DTO, including projects
repository.saveAndFlush(emp); // WORKS!
}
Danke, das funktioniert, aber ich möchte immer noch wissen, warum meine Update-Methode funktioniert, ohne die Projekte aus ihrem Repository zu holen (siehe meine aktualisierte Frage für Details) – wannabeartist
Es ist keine gute Idee, Fragen hier zu erweitern, da sie die ungültig machen Antwort zu einem gewissen Grad. Besser neue Fragen stellen. Ich werde meine Antwort entsprechend aktualisieren. –
Ist der Frühling ''Transactional' oder JPA's, oder spielt es eine Rolle? – CorayThan