[JPA] CascadeType 정리Backend/Spring2022. 12. 15. 13:50
Table of Contents
반응형
동일 트랜잭션 내부
- 연관 엔티티가 수정되었을 경우 CascadeType과 상관없이 자동으로 수정됩니다.
- 같은 트랜젝션이라 하더라도 해당 엔티티가
CasecadeType.PERSIST
로 설정 되어 있지 않으면 연관 엔티티를 추가하더라도 반영되지 않습니다. (CascadeType.MERGE
로 설정 되어도 추가는 되지 않음)
CascadeType 별 동작
CascadeType.ALL
- 상위 엔티티에서 하위 엔티티로 모든 작업을 전파합니다.
- 모든 Cascade 설정을 적용합니다.
CascadeType.PERSIST
- 상위 엔티티를 생성하고, 하위 엔티티를 추가하였을 때
persist()
를 수행하면 하위 엔티티도 같이persist()
가 수행됩니다. - 만약, 하위 엔티티가 DB에 등록된 키값을 가졌다면 detached entity passed to persist 예외가 발생합니다.
CascadeType.MERGE
- 트랜젝션이 종료되고 detach 상태에서 하위 엔티티를 추가하거나 변경된 이후에 상위 엔티티가
merge()
를 수행하게 되면 변경 사항이 적용됩니다. - 하위 엔티티의 추가 및 수정 모두 반영됩니다.
CascadeType.REMOVE
- 삭제 시 연관된 하위 엔티티들도 같이 삭제됩니다.
CascadeType.DETACH
- 상위 엔티티가 detech()를 수행하게 되면 연관된 하위 엔티티도 detach() 상태가 되어 변경 사항이 반영되지 않습니다.
고려사항
- 부모/자식 간의 관계를 설정하는 과정에서 부모가 데이터베이스에 존재하지 않는 경우 데이터 무결성의 문제가 발생합니다.
- 자식 레코드를 삭제하지 않은 상태에서 부모 레코드를 먼저 삭제하려 시도하는 경우 참조 무결성 위반이 발생합니다.
참고
반응형
'Backend > Spring' 카테고리의 다른 글
[Spring Boot] MultipartFile + Modal 사용 파일 업로드 (0) | 2023.01.06 |
---|---|
[Spring Boot] WebSocket & STOMP 사용 방법 (0) | 2023.01.02 |
[Spring] QuerydslRepositorySupport 사용 (0) | 2022.12.14 |
[Spring] JPA with Querydsl (0) | 2022.12.14 |
[JPA] NamedQuery (0) | 2022.12.09 |
@고지니어스 :: 규니의 개발 블로그
IT 기술과 개발 내용을 포스팅하는 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!