Cascade를 사용할 경우 @ManyToOne 어노테이션만으로 충분함에도 불구하고 @OneToMany 어노테이션을 통해 불필요한 양방향 매핑을 사용하여야 한다
이러한 문제점을 해결하기 위해 @Delete을 사용할 수 있다.
Cascade는 JPA에 의해 처리되어 JPA를 통해 외래 키를 찾아 참조하는 레코드를 제거하는 반면 @Delete는 DB에 의해 직접 처리한다.
즉,
@OnDelete(action = OnDeleteAction.CASCADE)
을 달아주면 양방향 매핑 없이도 Cascade와 같이 처리할 수 있다.
@Delete는 DB에서 처리해주기에 단일한 쿼리를 통해 연쇄적으로 제거할 수 있지만 Cascade의 경우에는 여러개의 쿼리를 날린다.
그렇기 때문에 @Delete가 효과적인 면은 있으나 on delete cascade에 의해 레코드의 참조 레코드까지 연쇄적으로 삭제해버릴 수 있는 가능성이 있다는 단점이 존재하므로 주의하여야 한다
하루에도 몇 개씩 열심히 작성하시는 모습이 보기 좋네요 배워야겠어요!