[Error] Cannot delete or update a parent row

Astin·2024년 2월 1일
0

📢 문제 발생

유저 삭제를 jpa에서 하려고 하니 위와 같은 에러 발생

🔔 원인 파악

유저는 userRole과 1:N의 관계를 가지고 있는데
유저를 삭제하면 유저를 참고하고 있는 userRole이 참고할 대상이 사라지므로 에러가 난 것

✅ 문제 해결

유저를 참고하고 있는 userRole을 먼저 삭제한 후에 유저를 삭제하면 문제가 해결된다.

💡 개선 방안

1. Cascade All

다만 이 경우 user와 userRole 삭제라는 2번의 삭제를 해야 하므로 다소 번거로운 면이 있다. 이를 개선하는 방법으로 처음 엔티티를 설정할때 cascade all 옵션을 주면 부모 엔티티를 삭제할 때 연관된 자식 엔티티도 같이 삭제된다.

Users

    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
    private List<UserRole> userRoles = new ArrayList<>();

2. 고아객체 선언

고아객체를 선언하면 부모 객체(주인 객체)가 자식 객체(종 객체)의 생명 주기를 관리하게 되어 같이 삭제되게 된다.

Users

    @OneToMany(mappedBy = "user", orphanRemoval = true)
    private List<UserRole> userRoles = new ArrayList<>();

🎁 참고

https://velog.io/@dlfrlwkd/error-Cannot-delete-or-update-a-parent-row-%EC%99%B8%EB%9E%98%ED%82%A4%EB%A1%9C-%EC%9D%B8%ED%95%9C-%EC%82%AD%EC%A0%9C-%EA%B4%80%EB%A0%A8-%EC%97%90%EB%9F%AC

https://devpouch.tistory.com/116

https://study-easy-coding.tistory.com/104

0개의 댓글

관련 채용 정보