[Querydsl][오류] Cannot delete or update a parent row: a foreign key constraint fails

2022. 7. 8. 18:52·💻 개발/JPA, Querydsl
728x90
반응형

Cannot delete or update a parent row: a foreign key constraint fails를 검색해보다가 

다들 workbench에 강제적으로 삭제하라는 말 밖에 없어서 글을 작성하게 되었습니다.

 

[에러발생 문구]

1. Cannot delete or update a parent row: a foreign key constraint fails

2. ` FOREIGN KEY (`review_id`) REFERENCES `tb_debate_review` (`review_id`))

3. a foreign key constraint fails (`community`.`tb_review_member`, CONSTRAINT `FKbxh8q7ql121fkgy4cvrq1hecc` FOREIGN KEY (`review_id`) REFERENCES `tb_debate_review` (`review_id`))

 

 

1. 오류가 발생한 이유


테이블을 쿼리로 직접 삭제할 때 예외가 걸렸다. 

왜냐하면 테이블 삭제 시 관계가 되어있는 두 개 이상의 테이블의 관계가 걸려 있기 때문이다.

테이블을 참조하게 되는 불안정한 이상 상태가 되어 DBMS에서 사전에 방지를 해주는 것인데, (ORMdml cascade 지정 설정으로 삭제가 되기도 함) 이를 무시하고 강제로 삭제를 하려고 할 때 오류 메시지를 보여준다.

member(자식)테이블의 컬럼을 삭제하려고 했을때 외래키의 무결성 제약조건에 위배 되어 발생한 오류이다.

 

 

2. 해결 방법


[1. 강제적인 삭제 방법]


1. foreign key 체크 설정을 비활성화하고
2. 테이블을 삭제시킨다.
3. 테이블 삭제 후 다시 foreign key 체크를 활성화하여 안전성을 지켜주면 된다.

 

[2. 고아객체를 선언하기]

entity객체의 @onToMany에 선언하기

orphanRemoval = true

club과 members가 관계 매핑이 걸려 있어 Cannot delete or update a parent row: a foreign key constraint fails가 발생했다.

 

@OneToMany(mappedBy = "club",  orphanRemoval = true)
@JsonBackReference
private List<ClubMember> members;

주인/종의 관계는

@ManyToOne인 club이 주인이고, @OneToMany인 members가 종이다.

 

orphanRemoval = true를 종에게 선언해서 부모엔티티가 삭제되면 자식 엔티티도 삭제된다.

따라서 CascadeType.PERSIST를 함께 사용하면, 부모가 자식의 전체 생명 주기를 관리한다.

 

 

혹시 더 좋은 방법이 있다면 댓글로 피드백 부탁드리겠습니다! 감사합니다.

 

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'💻 개발 > JPA, Querydsl' 카테고리의 다른 글

[JPA] 양방향 연관관계 주인 @ManyToOne / @OneToMany / MappedBy 선언위치  (0) 2022.07.11
[JPA] @Entity란? / @Entity주의사항 / 리플랙션  (0) 2022.07.10
[JPA] 영속성 컨텍스트 | JPA 내부에서 어떻게 동작하는가?  (0) 2022.07.09
[JPA] JPA를 사용하는 이유 및 객체와 SQL 중심의 개발 문제점  (0) 2022.07.03
[설정] 인텔리제이 queryDsl 인식하지 못하는 오류  (0) 2022.06.16
'💻 개발/JPA, Querydsl' 카테고리의 다른 글
  • [JPA] @Entity란? / @Entity주의사항 / 리플랙션
  • [JPA] 영속성 컨텍스트 | JPA 내부에서 어떻게 동작하는가?
  • [JPA] JPA를 사용하는 이유 및 객체와 SQL 중심의 개발 문제점
  • [설정] 인텔리제이 queryDsl 인식하지 못하는 오류
foodev
foodev
이것저것 개발과 이것저것 리뷰 합니다.
    250x250
  • foodev
    개발 개맛집
    foodev
  • 전체
    오늘
    어제
    • 분류 전체보기 (110)
      • 🌟🙇🏻‍♂️ 꼭 읽어봤으면 하는 글 (4)
      • 💻 개발 (73)
        • 설정 및 세팅 (4)
        • DB&서버&네트워크&암호 (11)
        • React (0)
        • JPA, Querydsl (14)
        • 알고리즘 (7)
        • 언어 (15)
        • 프레임워크 (12)
        • HTML, CSS (10)
      • ✍🏻 (32)
        • 회고록 (14)
        • 독서록 (7)
        • 일지록 (10)
        • 세미나 (1)
      • 💡 리뷰 (1)
        • 제품리뷰 (1)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.3
foodev
[Querydsl][오류] Cannot delete or update a parent row: a foreign key constraint fails
상단으로

티스토리툴바