Skip to content

Latest commit

 

History

History
40 lines (33 loc) · 1.29 KB

240219.md

File metadata and controls

40 lines (33 loc) · 1.29 KB

240219 CascadeType 영속성 전이

CascadeTypes

PERSIST - 저장 시점에 연관된 엔티티도 저장 MERGE - 업데이트 시점에 연관된 엔티티도 업데이트 REMOVE - 삭제 시점에 연관된 엔티티도 삭제 REFRESH - 엔티티를 새로고침할 때 연관된 엔티티도 새로고침 DETACH - 영속성 컨텍스트에서 분리될 때 연관된 엔티티도 분리(준영속 상태로 전환) ALL - 모든 영속성 전이 옵션을 적용

겪었던 문제

Team -< Meber 관계

  1. Team은 수정될 때 그 row를 수정
  2. Team에 속한 Member는 수정될 때 기존 row를 soft delete하고 새로운 row를 생성
@Entity
public class Team {
    @OneToMany(mappedBy = "team", cascade = CascadeType.PERSIST)
    private List<Member> members;
}

@Entity
public class Member {
    @ManyToOne
    private Team team;
}

이렇게 해두고 Team에 수정한 Member가 Team을 저장할 때 생성되는 것을 기대했지만, 실제로는 Member가 수정되지 않음 => Team에 cascade = CascadeType.MERGE를 추가해 부모 엔티티의 수정 시 자식 엔티티도 수정되도록 함

@Entity
public class Team {
    @OneToMany(mappedBy = "team", cascade = {CascadeType.PERSIST, CascadeType.MERGE})
    private List<Member> members;
}