영속성 전이
CascadeType.PERSIST
사용 예: 부모 엔티티를 저장할 때 자식 엔티티도 자동으로 저장해야 할 때.
상황: 부모와 자식이 함께 새로운 상태에서 영속성 컨텍스트에 추가될 때 유용합니다.
예시: 새 부모 엔티티를 저장하면서 관련된 자식 엔티티도 동시에 저장하는 경우.
2. CascadeType.MERGE
사용 예: 부모 엔티티를 병합할 때 자식 엔티티도 병합해야 할 때.
상황: 부모와 자식 엔티티가 이미 존재하고, 업데이트 시 병합이 필요한 경우 유용합니다.
예시: 부모 엔티티와 자식 엔티티가 이미 데이터베이스에 존재하며, 변경된 내용을 병합할 때 사용.
3. CascadeType.REMOVE
사용 예: 부모 엔티티를 삭제할 때 자식 엔티티도 함께 삭제해야 할 때.
상황: 부모-자식 관계가 강하게 결합되어 있어서 부모가 삭제될 때 자식도 삭제되는 것이 논리적일 때 유용합니다.
예시: 부모 엔티티가 삭제되면 관련된 모든 자식 엔티티도 함께 삭제해야 할 때.
4. CascadeType.REFRESH
사용 예: 부모 엔티티를 새로 고침할 때 자식 엔티티도 함께 새로 고침해야 할 때.
상황: 데이터의 일관성을 유지하기 위해 부모와 자식 엔티티를 새로 고침할 필요가 있을 때 유용합니다.
예시: 부모 엔티티의 최신 상태를 유지하면서 자식 엔티티도 동일하게 유지해야 할 때.
5. CascadeType.DETACH
사용 예: 부모 엔티티를 분리할 때 자식 엔티티도 함께 분리해야 할 때.
상황: 영속성 컨텍스트에서 엔티티를 분리할 때 유용합니다.
예시: 부모 엔티티를 영속성 컨텍스트에서 분리하면서 자식 엔티티도 분리해야 할 때.
6. CascadeType.ALL
사용 예: 부모 엔티티에 대한 모든 작업(PERSIST, MERGE, REMOVE, REFRESH, DETACH)이 자식 엔티티에도 전파되어야 할 때.
상황: 부모-자식 간의 강한 결합이 필요하고, 모든 작업이 자동으로 자식에게 전파되어야 할 때 유용합니다.
예시: 부모 엔티티와 자식 엔티티 간의 강한 종속성이 있을 때 사용합니다.
일반적인 현업 사용 사례
CascadeType.PERSIST와 CascadeType.MERGE 조합:
새로운 부모 엔티티와 자식 엔티티를 동시에 저장하거나 기존 엔티티를 병합할 때 주로 사용합니다.
예: 새로운 주문과 주문 항목을 동시에 저장하거나 기존 주문을 업데이트할 때.
CascadeType.REMOVE:
부모 엔티티가 삭제될 때 자식 엔티티도 함께 삭제해야 하는 경우에 사용합니다.
예: 계정 삭제 시 해당 계정에 속한 모든 데이터도 삭제해야 할 때.
CascadeType.ALL:
부모와 자식 간의 강한 결합이 있어 모든 작업이 자식에게도 전파되어야 하는 경우에 사용합니다.
예: 트랜잭션 관리가 중요한 경우에 전체적인 데이터 일관성을 유지하기 위해 사용.
Last updated