다 대 다 관계가있는 엔티티가 2 개 있습니다. Movie Entity는이 관계의 소유자이므로, Actor Entity를 삭제할 때 @PreRemove 주석이 달린 메소드를 사용하여 "Foreign key violation exception"을 피하기 위해 Movie Cast에있는 Actor ID의 모든 항목을 삭제합니다. 영화 객체가 제대로 데이터베이스에 업데이트됩니다 -JPA - @PreRemove 메서드 동작
영화 클래스
@Entity
public class Movie extends AbstractBusinessObject{
@ManyToMany
private Map<String, Actor> cast;
// setters and getters
public void removeCastMember(Actor actor){
for (Entry<String, Actor> e : cast.entrySet()) {
if(e.getValue().id.equals(actor.id)){
cast.remove(e.getKey());
}
}
} // removeCastMember()
}
Actor 클래스
@Entity
public class Actor extends AbstractBusinessObject{
@ManyToMany(mappedBy = "cast")
private Set<Movie> movies;
// setters and getters
@PreRemove
private void removeActorFromMovies() {
for (Movie m : movies) {
m.removeCastMember(this);
}
}
}
내 테스트, 작동 에서 명확하게합니다. 그러나 saveOrUpdate() 호출이 없거나 해당 개체를 유지/병합 할 때 어떻게 가능할 수 있는지 이해할 수 없습니다.
그런 철저한 대답에 감사드립니다. 중요한 부분을 잊어 버렸습니다. '병합은 분리 된 개체를 사용하는 것입니다.' –