반응형
@OnDelete
- DDMS 레벨에서 작동
- @OnDelete(action = OnDeleteAction.CASCADE)
- DDL 생성시 cascade 제약 조건이 생성 됨.
여기서 DDL이란 Data Definition Language로 데이터 베이스를 정의하는 언어이며, CREATE, ALTER, DROP, TRUNCATE를 말한다.
casecade=CascadeType.REMOVE
- JPA 레벨에서 작동
- JPA가 부모 엔티티를 삭제할 때 연관된 자식 데이터에 대한 DELETE 쿼리를 실행 함
1. cascade = CascadeType.REMOVE를 설정할 경우
자식 엔티티를 삭제하는 쿼리가 먼저 실행되고, 그 다음 부모 엔티티를 삭제하는 쿼리가 실행 된다.
그리고 자식 엔티티 한 건을 삭제 하려고 하면 부모 테이블에 연관되어 있는 데이터가 존재 하므로 아래와 같이 에러가 발생한다.
(부모와 연관된 자식이 한건이라면 이 에러가 발생하지 않는다.)
org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: Referential integrity constraint violation
cascade=cascadeType.REMOVE를 설정했는데도 원활한 삭제가 이뤄지지 않았다.
부모테이블에서 자식을 만들게 되었을 때 삭제를 진행했을 때 위와같은 에러가 지속적으로 발생해서
cascade를 ondelete로 설정하고 에러를 해결할 수 있었다.
2. 둘다 설정할 경우
위와 같은 에러는 발생하지 않지만 자식 엔티티 하나만 삭제해도 부모와 관련있는 모든 자식 엔티티까지 삭제 된다.
결론 : @OnDelete(action= OnDeleteAction.CASCADE)만 설정하여 위 요구사항을 충족
반응형
'I LEARNED > TIL' 카테고리의 다른 글
[TIL]지역변수 구분의 중요성 (0) | 2022.09.11 |
---|---|
[TIL] MultipartFile null체크 (0) | 2022.09.08 |
WIL_실전2주차 (0) | 2022.09.06 |
[TIL] Cascade=cascadeType.ALL 남용의 문제 (0) | 2022.09.05 |
[TIL] Failed to instantiate StackNameProvider해결 (0) | 2022.09.02 |
댓글