N(클래스A) 대 1(클래스B) 연관관계의 A, B가 있고 A는 오직 B에만 의존하는 클래스였다. 그래서 B클래스를 삭제할 때 B에 mapping되어 있는 A클래스들을 모두 삭제하려고
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
를 붙여줬는데 em.remove(A)하니깐 delete 쿼리가 안 나갔다.
A 객체에 여러 B객체들이 foreign key로 의존하고 있는데 A가 사라지면 안 된다는 거였다.
그래서 @OneToMany(mappedBy = "restaurant",orphanRemoval = true)
를 붙여줬더니 em.remove(A)하니깐 A에 매핑된 B 객체들이 먼저 삭제돼고 A클래스도 삭제됐다.
CascadeType.remove와 orphanRemoval = true는 같은 거라고 그러던데 뭔가 차이가 있나보다...알아보자!!
CasCadeType.ALL을 아 붙이고 orphanRemoval =true만 붙여도 A 삭제하면 A에 매핑된 B 객체들이 모두 삭제된다. 이 두 개를 같이 붙이면 B 객체 중 하나만 삭제해도 A객체와 A에 매핑된 B 객체 모두가 삭제되는 것 같다.