@OnetoMany 관계 삭제

2022. 4. 21. 18:14BackEnd(Java)/Spring Data JPA

@OnetoMany관계에서 delete 연산을 해보자.

 

Gym과 Member가 (1:N)인 관계이다(Member가 연관관계의 주인)

 

 

Gym을 삭제하려고 하면 아래의 오류가 뜬다.

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

 

해당 오류를 찾아보니 두 테이블 사이 foreign key로 연결되어 있을 경우에 삭제하면 나타나는 오류이다.

Member가 Gym의 id값을 fk로 가지고 있다. 그래서 DB에서 삭제하지 못하게 오류가 뜨게 된다.

 

그렇다면 어떻게 해야 삭제를 할 수 있을까?

 

두 엔티티 사이의 연관관계를 끊어 버리는 것이다.

 

 

연관관계의 주인인 Member에서는 gym= null로 하고, Gym에서는 List <Member> member의 컬렉션을 삭제하여 연관관계를 끊어버리는 것이다.

 

//Gym 엔티티


//헬스장 - PT 삭제
public void deleteGym(){
    int size=getPt().size();

    for (int i = 0; i < size; i++) {
         getPt().get(0).deleteGym();
         getPt().remove(0);
    }
}
 //Member 엔티티
 
 //Pt가 속한 헬스장 연관관계 해제
public void deleteGym(){
     this.gym=null;
 }

 

이렇게 하면 Gym을 삭제했을 때 Gym은 제대로 삭제되고 Member 엔티티의 gym 필드는 null로 되어 삭제 연산이 작동하게 된다.


참고자료

반응형