org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [null]
게시글을 삭제하려고 하면 오류 발생
게시글 삭제
// PostService.java
@Transactional
public void deletePost(Long postId){
Post post = postRepository.findOne(postId);
postRepository.delete(post);
}
Caused by: java.sql.SQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails...
DB에서 chat_room
이 post
를 외래키(post_id)로 참조하고 있는데, 이때 게시글을 삭제하려고 하니 constraint 제약이 걸려있어 chat_room
에서 삭제를 막고있다.
@OneToMany 어노테이션 안에 cascade = CascadeType.ALL 속성을 추가
기존 코드
// Post.java
...
@OneToMany(mappedBy = "post")
private List<ChatRoom> chatRooms = new ArrayList<>();
수정 후
// Post.java
...
@OneToMany(mappedBy = "post",
cascade = CascadeType.ALL) // 모든 경우에 CASCADE 해서 다 같이 묶여서 처리 (ALL, DELETE, UPDATE 등 있음)
private List<ChatRoom> chatRooms = new ArrayList<>();
비슷하게 이번에는 DB에서 chat_content
가 chat_room
를 외래키(chatroom_id)로 참조하고 있는데, 이때 게시글을 삭제하려고 하니 constraint 제약이 걸려있어 chat_content
에서 삭제를 막고있다.
마찬가지로 cascade = CascadeType.ALL 속성을 추가해준다.
기존 코드
// ChatRoom.java
...
@OneToMany(mappedBy = "chatRoom") // ChatContent의 chatRoom에 의해 매핑됨
private List<ChatContent> chatContents = new ArrayList<>();
수정 후
// ChatRoom.java
...
@OneToMany(mappedBy = "chatRoom", // ChatContent의 chatRoom에 의해 매핑됨
cascade = CascadeType.ALL) // 모든 경우에 CASCADE 해서 다 같이 묶여서 처리 (ALL, DELETE, UPDATE 등 있음)
private List<ChatContent> chatContents = new ArrayList<>();