나는 다음 (간체) 문제가있어 : 나는의 실체가Hibernate는 entityManager.remove()를 호출 할 때 참조 된 엔티티를 제거합니까?
을 대일 관계 : 한 - 투에서
@Entity
public class Membership {
private User user;
@ManyToOne(cascade = CascadeType.ALL)
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
... 다음과 같은 해당 클래스 - 많은 측면 :
@Entity
public class User extends Person {
private Set<Membership> memberships = new HashSet<Membership>();
@OneToMany(mappedBy = "user", cascade = { CascadeType.MERGE,
CascadeType.REMOVE, CascadeType.REFRESH })
public Set<Membership> getMemberships() {
return memberships;
}
public void setMemberships(Set<Membership> memberships) {
this.memberships = memberships;
}
}
나는이처럼 그들을 new
를 통해 user1
라는 사용자와 회원 mem1
를 만들고 연결 한 :
mem1.setUser(user1);
user1.getMemberships().add(mem1);
는이 같은를 지속하고 있습니다 :
entityManager.getTransaction().begin();
entityManager.persist(user1);
entityManager.persist(mem1);
entityManager.getTransaction().commit();
가 지금은 회원 자격을 삭제할. 그래서 전화 :
entityManager.remove(mem1);
... 나는 Membership
측면에 User
측면에 cascade=CascadeType.REMOVE
및 cascade=CascadeType.ALL
을 설정 한 리콜을. 그러나 참조 된 회원 mem1
은 user1
에서 자동으로 제거되지 않습니다. 즉 user1.getMemberships()
은 여전히 mem1
입니다. 이것이 올바른 행동입니까? JPA는 엔티티를 데이터베이스에서 제거 할 때 객체에서 참조를 자동으로 제거하지 않습니다.
이것은 어리석은 질문처럼 보일 수 있지만 JPA의 초보자이며 특수 효과가 어떤 종류의 마법을하는지 정확히 알기가 어렵습니다. 때로는 상당히 큽니다.