Err-SpringBoot] Cannot delete or update a parent row: a foreign key constraint fail

BRINCE·2022년 10월 30일

게시판에 해시태그 기능을 구현하던 도중에, 해시태그 기능까지는 구현이 되었으나

원래 있던 게시글을 삭제하면 오류가 발생했다.

이유는 단순하다.

게시글과 해시태그를 양방향 맵핑을 해주고 중간 엔티티를 생성시켰으나 단순히 연결이 되어있는 게시글만 삭제하면 오류가 나는것이다.

그래서 해당 게시글을 삭제하거나 수정할때는 수정/삭제만 하면 안되고 중간 엔티티의 값들을 null로 변경시켜줘야 한다. (중간 엔티티 값을 삭제를 하면 안된다!)

 for( ArticleHashtag articleHashtag : articlehashtagrepository.findByArticleId(articleId)){
       articleHashtag.setArticle(null);
       articleHashtag.setHashtag(null);
        }

이렇게 값들을 null 로 변경시켜 준 후에 게시글을 삭제하도록 구조를 짜면 된다.

마찬가지로 업데이트/ 게시글 등록 또한 삭제를 하면 뭔가 얽혀서 등록/수정이 안되는 오류가 있었다.

마찬가지로 값을 null로 변경시켜 준 후에 수정 작업을 처리하도록 하면 된다.

그리고 게시글 등록에도 오류가 있었다.

add/update 를 할 수 없다는데 뭔가 꼬인듯 했다.


이렇게 기존의 로직은 게시글을 저장한후, 다시 불러와서 그것을 게시글해시태그 엔티티에 저장한 후에 해시태그도 값이 없다면 저장한 후에 또 다시 불러와서 저장하게 했는데,

이렇게 따로 불러오는것 없이 바로 가져와서 저장을 하니 해결됐다.

덤으로 코드 길이도 반으로 줄었다.

굿!

profile
자스코드훔쳐보는변태

0개의 댓글