想像して、次のモデル: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>();
私は既存のプロジェクトを参照する新しい従業員を作成し、その従業員を保持しようとすると、Iエラーが発生する:
detached entity passed to persist: Project
私はemploを作成します
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
ここで質問を拡張するのは良い考えではありません。ある程度答えてください。新しい質問をよくする。私はそれに応じて私の答えを更新します。 –
その春の '@ Transactional'またはJPAですか、それとも重要ですか? – CorayThan