[JPA] 영속성 전이

홍건의·2024년 6월 2일
0

JPA 학습

목록 보기
10/11

영속성 전이

특정 엔티티를 영속 상태로 만들 때 연관관계에 놓여있는 엔티티도 영속 상태로 만들고자 할 때 사용하는 기능

영속 상태 : 영속성 컨텍스트가 관리하는 Entity

@Entity
public class Team {
	
    @OneToMany(mappedBy = "user_id", cascade = CascadeType.PERSIST)
    private List<User> userList = new ArrayList<>();

CascadeType.PERSIST 옵션을 통해 team이 영속 상태가 되면 user도 영속 상태가 된다.

CascadeType.DELETE 옵션일 때, team 삭제하면 user도 삭제된다.

CascadeType 종류

public enum CascadeType {
	ALL,
    PERSIST,
    MERGE,
    REMOVE,
    REFRESH,
    DETACH
}
cascade = { CascadeType.PERSIST, CascadeType.REMOVE }

처럼 같이 사용할 수도 있다.

추가로 CascadeType.PERSIST, CascadeType.REMOVE는 em.persist(), em.remove()를 실행할 때 바로 전이가 발생하지 않고 플러시를 호출할 때 전이가 발생한다.

고아객체

부모 엔티티(tean)와 연관관계가 끊어진 자식 엔티티를 자동으로 삭제하는 기능.
부모 엔티티에서 자식 엔티티의 참조만 제거하면 자식 엔티티가 자동으로 삭제된다.

@Entity 
public class Parent {
	
    @Id @GeneratedValue
    private Long id;
    
    @OneToMany(mappedBy = "parent", orphanRemoval = true)
    private List<Child> children = new ArrayList<>();
    
}

로 해놓고,

	parent.getChildren().remove(0);

코드가 수행되면

	DELETE FROM CHILD WHERE ID = ?

를 통해 첫 번째 자식이 제거된다.
결론적으로 컬렉션에서 엔티티를 제거하면 DB의 데이터도 삭제된다.

profile
Backend Developer

0개의 댓글

관련 채용 정보