JPA 영속성 전이와 고아 객체

영속성 전이

연관관계 매핑에서 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 영속 상태로 만드는 방법이다.

연관관계 어노테이션의 cascade 옵션을 통해 설정할 수 있으며, 연관관계 매핑과는 무관하게 단순히 영속의 편리함을 제공하는 기능이다.

 

Member와 이 cascade 되어있다면, Member가 영속될 때 Team도 같이 영속된다.

즉, Team이 삭제되면 Member도 삭제된다.

편리한 기능이지만, 안전성을 위해 REMOVE는 지양하고, PERSIST와 ALL 옵션을 권장한다. 

 

고아 객체

고아 객체란 부모 엔티티와 연관관계가 끊어진 자식 엔티티를 뜻하며, 자동으로 삭제된다.

예를 들어 Team의 MemberList에서 Member를 삭제하면 삭제된 Member 객체는 고아 객체가 되며 delete 쿼리가 발생한다.

cascade는 Team이 삭제됐을 때 같이 영속된 MemberList에 있는 모든 Member에 대해 delete 쿼리가 발생하지만, orphanRemoval는 Team의 MemberList에서 Member를 1개만 삭제해도 delete 쿼리가 발생한다는 차이가 있다.

 

cascade와 orphanRemoval를 같이 사용해서 부모를 통해 자식을 관리할 수 있다.

고아 객체 역시 삭제에는 주의할 필요가 있다.

 

 

예시 코드

@Entity
public class Team {
    @Id @GeneratedValue
    private Long id;

    private String name;

    @OneToMany(mappedBy = "team", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<Member> memberList = new ArrayList<>();
}

'개발 > Spring' 카테고리의 다른 글

JPA 값 타입  (0) 2024.01.28
JPA 프록시와 지연로딩  (1) 2024.01.28
JPA 엔티티 매핑  (1) 2024.01.27
JPA 동작 과정  (0) 2024.01.26
JPA란 무엇인가?  (1) 2024.01.26