본문 바로가기

JPA

CascadeType.ALL, orphanRemoval = true

@Entity

public class Customer {

   @OneToMany(cascadeType.ALL, orphanRemoval = true)

   @JoinColumn(name = "customer_id")

   private Set<Address> addresses;

}


1. CascadeType.ALL

Entity를 저장/수정/삭제 할 때 Addresses도 똑같이 저장/수정/삭제된다. 다만, Database레벨에서 이루어지는것이 아니라 JPA persistence provider에 의해서 이루어진다.


2. orphanRemoval = true

collection에서 Address가 삭제되는 경우 database에서도 address row를 삭제한다.


결과적으로 위와 같은 설정의 경우 Address객체의 lifeCycle은 Customer 객체에 의해서 결정되는 전형적인 composition 관계가 된다.