JAVA/JPA 학습기록

[JPA] CascadeType.ALL 상태에서의 SQL ERROR: 23503

kth990303 2021. 5. 15. 20:51
반응형

SQL Error: 23503 에러가 발생했다.

이 에러는 무엇인지 모르겠어서 현재 QNA에 글을 남겨둔 상태이다.

https://www.inflearn.com/questions/213911

 

[SQL Error: 23503] Cascade 설정 후 Parent remove할 때 질문입니다. - 인프런 | 질문 & 답변

안녕하세요! 이전 질문에서 영한님 답변을 받고 원인을 해결하여 다른 경우 또한 테스트해보고 있는데 SQL Error: 23503 에러가 발생했고, 구글링 결과 참조 키 제약조건 위배될 때 발생하는 에러라

www.inflearn.com

(21.05.17 추가)

CascadeType.ALL, orphanRemoval=false 로 설정해두다보니,

parent의 자식 목록에서 child1은 지웠지만, 데이터베이스에서 child1은 남아있는 상태이다.

그리고 parent 엔티티는 하나의 자식 엔티티(child2)만 가지게 될 것이다.

여기까진 예측이 될 것이다.

 

그러나 그 이후 parent를 지울 때,

cascade로 parent 뿐만 아니라 children을 모조리 지워야하는데, 

이 때 자식 엔티티들의 정보를 지울 때, 부모 입장에서 child1은 지웠지만 child1 입장에서의 부모는 parent로 연결돼있기 때문에 SQL Error 23503이 발생한 것이다.

 

따라서 연관관계를 끊을 때 자식을 지우고 싶다면 그냥 orphanRemoval=true로 해놓자. (단, 단일참조 및 단일소유자일 때만 사용하도록!)

 

반응형