난 그냥 내 문제에 대한 모든 솔루션 (정전 어쩌면 어떤 종류의)JPA - OneToMany-관계에있는 개체를 업데이트
은 다음과 내가 가지고 말할 수 있습니다를 찾을 수 없기 때문에 그럼 난 조금 혼란 스러워요 (간체) 엔티티 :
@Entity
public class Employee {
@Id
private long id;
@OneToMany(mappedBy="owner")
private Collection<Phone> phones;
}
@Entity
public class Phone {
@Id
private long id;
@ManyToOne
private Employee owner;
}
내가 JPA에 의해 관리되는 전화 목적이있다. 그리고 지금은 그런 일에 그 전화 개체의 직원을 변경하려면 :
phone.setEmployee(otherEmployee);
나는 JPA는 해당 직원이 너무 업데이트 될 업데이트 것이라고 생각했다. 내가 잘못? @ManyToOne 및 @OneToMany (cascade = CascadeType.ALL, orphanRemoval = true) 주석을 실험했지만 작동하지 않습니다.
Employee 개체를 직접 업데이트해야합니까? 불행히도 튜토리얼이나 다른 예에서이 케이스를 찾지 못했기 때문에 더 많이 말할 수 있기를 바랍니다. 혼란 스럽습니다. 미리 감사드립니다.
편집 그것도 명확하게하기 :
Phone phone = new Phone();
Employee employee = new Employee();
phone.setEmployee(employee);
em.persist(employee);
em.persist(phone);
employee.getPhones(); //the phone object should be included here.
제거하지 않으므로 'CascadeType.REMOVE'는 도움이되지 않습니다. 대신에'CascadeType.PERSIST' 또는'CascadeType.ALL'을 시도하십시오. 또한'Employee' 관계를 변경 한 후에'phone' 객체를 저장한다고 가정합니다. – Darwind
그게 맞아요. CascadeType.ALL을 가지고 있었지만 불행히도 그게 해결책이 아닙니다. (지금은 명료하게 편집했습니다). 소유자가있는 ** 전화 번호 **가 DB에 저장되어'em.find (...) '에 의해 읽혔습니다. 이제는 주인을 바꾸고 싶습니다. (물론 해당 Employee 객체도 업데이트해야합니다.) – Cyboot
소유자를 다른 Employee 객체로 변경 한 후에 em.merge (phone)를 호출 했습니까? – Darwind