게시물과 댓글 기능을 모두 구현하고나서 게시물을 지우려고 하면 아래와 같은 오류가 뜬다.
ava.sql.SQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`board`.`comment`, CONSTRAINT `FKs1slvnkuemjsq2kj4h3vhx7i1` FOREIGN KEY (`post_id`) REFERENCES `post` (`id`))
게시물의 Id 즉 post_id 를 Comment 테이블에서 참조하고 있으므로 해당 post_id를 가지고 있는 부모 행이 삭제되려하기 때문에 발생한 오류이다.
public class Post extends Timestamp {
...
@OneToMany(mappedBy = "post", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Comment> commentList = new ArrayList<>();
...
}
cascade = CascadeType.ALL 은 모든 변경작업이 자식 엔티티에게 전파되도록 하고, orphanRemval = true 는 부모 엔티티에서 참조되지 않는 자식 엔티티를 자동으로 삭제되게 한다.
cascade 의 속성의 주요 값들로는
cascade = CascadeType.ALL : 모든 변경 작업을 전파
cascade = CascadeType.PERSIST : 영속성 컨텍스트에 저장될 때 ( EntityManager.persist() 호출 시 )
cascade = CascadeType.MERGE : 엔티티가 병합될 때 ( EntityManager.merge() 호출 시 )
cascade = CascadeType.REMOVE : 엔티티가 삭제될 때 ( EntityManager.remove() 호출 시 )
cascade = CascadeType.REFRESH : 엔티티를 리프레시할 때 ( EntityManager.refresh() 호출 시 )
cascade = CascadeType.DETACH : 엔티티를 분리할 때 ( EntityManager.detach() 호출 시 )
등이 있다.
'개발일지' 카테고리의 다른 글
20231226 - 다대다 관계와 중간테이블 (0) | 2023.12.26 |
---|---|
20231226 - 프로그래머스/140108 (0) | 2023.12.26 |
20231220 - 프로그래머스/131128 (0) | 2023.12.20 |
20231219 - 엔티티 연관관계(게시물, 유저, 댓글) (0) | 2023.12.19 |
20231218 - 페이징 구현 (0) | 2023.12.18 |