개요
- 영속성 전이, 고아 객체를 통해서 다른 엔티티의 생명 주기를 관리해보자.
영속성 전이 : CASCADE
- 특정 엔티티를 영속 성태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들고 싶을 경우 사용
- EX) 부모 엔티티를 저장할 때 자식 엔티티도 함께 저장한다.
- @OneToMany나 @ManyToOne에 옵션으로 줄 수 있다.
- javax.persistence.CascadeType
JPA Cascade Type
- ALL : 모두 적용(모든 작업을 전파)
- PERSIST : 영속(연쇄적 저장)
- REMOVE : 삭제(연쇄적 삭제)
- MERGE : 병합(연쇄적 업데이트)
- REFRESH : REFRESH (연쇄적 새로고침)
- DETACH : DETACH (연쇄적 영속성 제거)
주의
- 꼭 부모 엔티티가 자식 엔티티의 단일 소유자 일 때만 영속성 전이를 사용해야 한다.
- 만약 다른 엔티티가 자식 엔티티를 가지고 있을 경우 사용하면 안된다.
- 자식 엔티티를 따로 영속화 하지 않기 때문에 다른 엔티티에서 자식 엔티티 필드가 사라지는 현상이 발생할 수 있음.
부모 엔티티
@Entity
@Setter @Getter
public class Parent {
@Id
@GeneratedValue
private Long id;
private String name;
// 연쇄적으로 하위 객체에도 상위 객체의 작업을 같이 수행
// Cascade 속성으로 인해 parent만 영속화 하여도 영속성 전이가 되어 child는 자동 저장
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL)
private List<Child> childList = new ArrayList<>();
//양방향 연관관계 설정 편의 메서드
public void addChild(Child child){
childList.add(child);
child.setParent(this);
}
}