-
[JPA] 영속성 전이(CASCADE)와 고아 객체 정리개발 지식/JPA 2023. 11. 30. 10:27
영속성 전이 시 주의할 점
@OneToMany(mappedBy = "member", cascade = CascadeType.ALL) private List<Post> postList = new ArrayList<>();
- persist를 하는 경우에 영속성 전이를 제대로 동작시키기 위해서는 연관관계 주인쪽 세팅뿐만 아니라 member.getPostList().add(post) 이런 식으로 양방향 세팅을 해야한다.
- 영속성 전이의 부모와 자식 관계는 말 그대로 영속성이 전이되는 것만 해당하고 연관관계의 주인은 db에 연관관계가 있는 객체들을 저장할 때 반드시 연관관계를 세팅해야 하는 쪽을 의미하므로 둘은 전혀 다른 개념이다.(연관관계의 주인이 아닌 쪽은 읽기만 가능)
CascadeType.REMOVE vs 고아 객체
- 영속성 전이는 말 그대로 부모 객체의 영속성이 자식 객체에 전이되는 것을 말하고 고아 객체의 경우에는 부모 객체와의 참조가 제거된 자식 객체를 삭제하는 것을 의미한다. 고아 객체 제거 기능을 활성화 시킨 상태에서 부모 객체를 제거하면 이 때에는 CascadeType.REMOVE처럼 동작하게 된다.
CascadeType.ALL + orphanRemoval=true
- 두 옵션을 모두 활성화 하면 부모 엔티티를 통해서 자식의 생명 주기를 관리할 수 있다.(즉, 자식 엔티티의 데이터 엑세스 계층이 없어도 된다. 보통의 경우에는 엔티티 매니저를 통해 생명 주기를 관리한다.)
'개발 지식 > JPA' 카테고리의 다른 글
[JPA] Referential integrity constraint violation (0) 2023.11.29 [JPA] em.merge(entity)는 내부 코드 들여다보기 (0) 2023.11.29 [JPA] JpaRepository 관련 코드 들여다보기 (0) 2023.11.28 [JPA] Entity 클래스의 @NoArgsConstructor(access = AccessLevel.PROTECTED) (0) 2023.11.07