반응형
에러코드는 아래와 같다
org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: Referential integrity constraint violation
1:N의 관계를 게시물과 댓글/게시물과 이미지에 걸어놓으려고 하다보니 게시물이 삭제될시 댓글이 삭제되거나,이미지도 같이 삭제되어야 하기 때문에 cascade=cascadeType.ALL을 걸어놨다.
하지만 이 과정에서 cascade의 특성을 이해하지 않고 남발해서 문제가 발생했다.
부모의 영속화를 자식에게 전이할 이유가 없다면 cascade=cascadeType.ALL이 아닌 cascade=cascadeType.Remove를 쓰도록 하자. 만약 cascade=cascadeType.PERSIST를 사용하고 싶다면 부모를 지울 때마다 다른 쪽 부모를 DETACH해주면 된다.
그래서 결론이 뭔데?
연관관계를 여러 개 갖는 Entity에서는 두개 이상의 필드에 CascadeType.PERSIST를 적용하지 말 것
꼭 필요할 경우에만 cascade=cascadeType.ALL을 사용할 것
cascade=cascadeType.ALL 를 cascade=cascadeType.REMOVE로 바꾸면 에러가 해결된다.
반응형
'I LEARNED > TIL' 카테고리의 다른 글
[TIL] [JPA] @OnDelete VS cascade = CascadeType.REMOVE (0) | 2022.09.06 |
---|---|
WIL_실전2주차 (0) | 2022.09.06 |
[TIL] Failed to instantiate StackNameProvider해결 (0) | 2022.09.02 |
[TIL] [troubleshooting] Intellij 실행시 Lombok Requires Annotation Processing 경고 (0) | 2022.09.02 |
[TIL] [troubleshooting] cause: invalid source release: 11 (0) | 2022.09.02 |
댓글