@OneToMany
One 관계에서 Many를 단방향 매핑을 했을 때 외래키 not null 조건으로 caseCade가 되지 않았다.
#boardEntity
.......
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name="board_id")
@JsonIgnore
private final List<CommentEntity> commentEntityList = new ArrayList<>();
.......
#commentEntity
.......
@Column(name="board_id")
private Long boardId;
.......
다음과 같이 CaseCadeAll, orphanRemoval가 걸려있었는데 삭제시 외래키 not null 제한이 걸렸다.
찾아보니
jpa에서 delete 메소드를 통해 부모를 삭제했을 때,
단방향 매핑일 경우, jpa에서 먼저 외래키(부모키)를 null로 만든후, orphanRemoval = true 를 통해 null인 고아 객체를 삭제하는 방식이었다.
즉
select -> set ((외래키)부모키 = null) -> delete 순으로 삭제가 진행된다.
나같은 경우는 외래키 제약조건을 not null로 설정했다. 따라서 set null이 되지 않았다.
결국 SQL로 DB 쿼리를 작성할 때 외래키 제약조건에 null을 빼주었다.
select -> set ((외래키)부모키 = null) -> delete 순으로 잘 진행되었고
caseCade가 적용되었다.