JPA OneToMany 단방향 매핑에서 CaseCade not null 문제

행행·2023년 2월 15일
0

@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가 적용되었다.

profile
성장하려고 분투 중인 개발자

0개의 댓글