[강의 정리] 영속성 전이, 고아객체

나무·2023년 12월 3일

JPA 

목록 보기
8/11
post-thumbnail

1. 영속성 전이

영속성 전이란?

영속성 전이란 관계 매핑 설정 중 하나로, 엔티티의 상태 변화가 다른 연관된 엔티티에게 전파 되도록 하는 매커니즘을 나타낸다.

간단히 말해

"내가 삭제되면 나랑 연관관계 맺은 애들도 삭제되어야하고,

내가 저장되면 나랑 연관관계 맺은 애들도 같이 저장되어야 한다."

는 것이다.

영속성 전이의 종류

총 6가지가 있는데, 실제 자주 사용하는건 ALL, PERSIST, REMOVE 정도이다.


영속성 전이 사용 : PERSIST

게시글 엔티티 (자식)

회원 엔티티 (부모)

테스트 코드

원래 같으면 영속화가 적용되려면 자식들도(post1, post2, post3) 먼저 전부 영속화 상태에 들어가있어야하는데 CASCADE 옵션 덕분에 부모만 저장을 하면 자식들에게 전부 영속성이 전이 된다.

※ 부모 자식 상관없이 누구든지 영속성 전이를 사용할 수 있다.


영속성 전이 사용 : REMOVE

게시글 엔티티 (자식)

회원 엔티티 (부모)

테스트 코드

저장과 마찬가지로 이번에는 부모만 삭제를 했지만 자식들 모두 영속성이 전이되어 다같이 삭제되었다.

만일 영속성 전이 옵션을 사용하지 않았더라면, 외래키 제약 조건때문에 부모 엔티티를 삭제하려는 순간 예외가 발생하게 될것이다.



2. 고아 객체

JPA 에서는 부모 엔티티와 연관관계가 끊어진 자식 엔티티를 자동으로 삭제하는 기능을 제공해주는데 이걸 고아 (ORPHAN) 객체 제거 라고 한다.

부모 엔티티의 컬렉션에서 자식 엔티티의 참조만 제거하면 자식 엔티티가 자동으로 삭제된다.

고아 객체 제거 모드

회원 엔티티 (부모)

테스트 코드

부모와 연관관계가 끊긴 첫번째 자식만 정상적으로 삭제 된것을 볼 수 있다.

영속성 전이 + 고아 객체 제거

영속성 전이와 고아 객체 제거를 동시에 사용하게되면 부모를 통해 자식엔티티의 생명주기를 관리할 수 있게 된다.

자식 저장 -> 부모에 등록만 하면된다.(CASCADE)

Parent parent = em.find(Parent.class, parentId);
parent.addChild(child);

자식 제거 -> 부모에서 제거만 하면된다.(orphanRemoval)

Parent parent = em.find(Parent.class, parentId);
parent.getChildren().remove(child);

본 포스트는
김영한의 자바 ORM 표준 JPA프로그래밍 기본 강의 및 도서를 참고하여 정리했습니다.

profile
🍀 개발을 통해 지속 가능한 미래를 만드는데 기여하고 싶습니다 🍀

0개의 댓글