CascadeType.REMOVE 는 부모 엔티티가 사라졌을 때 자식 엔티티도 삭제된다. 그리고 orphanRemoval 또한 부모 엔티티와 관계가 끊어진 자식 엔티티, 즉 고아 엔티티를 삭제한다. 아니 그럼 뭐가 다른거야?
CascadeType.REMOVE는 부모 엔티티가 사라졌을 때 자식 엔티티가 자동으로 사라지지 않는다. 즉, 테이블에서 제거되지 않는다. 더하여 내가 실험한 케이스는 아래와 같다.
위처럼 PERSIST와 orphanRemoval을 모두 True로 했다. 그런데 뭔가가 남아있는지 포스트맨에 계속 요청을 보내도 0이라는 답변만 돌아올 뿐...무엇이 문제였는가? 다음은 H2Console을 이용한 LikesComment 테이블이다.
위처럼 분명히 deleteById를 사용해서 삭제했음에도 남아있다!
위 참고링크의 예상치 못한 상황 2에 해당한다.
-> 더불어 아무리 이해하려고 해도 오늘은 이해가 안된다. 그러나 나중을 위해 키워드와 상황만을 남긴 채 종료하려고 한다.
-> 22.01.04 기준아직 답을 찾지 못했다...대체 왜지? 그러나 REMOVE와 orphanRemoval을 비교하는 글은 남긴다.
위와 같은 경우에 정상 작동한다.
위 두 친구들은 사용되는 방식이 다르다.
REMOVE를 사용하면 부모 객체를 삭제했을 때 자식 객체와의 연결이 끊긴다. 그러나 자식 객체는 삭제되지 않는다.
OrphanRemoval 은 연결이 끊긴 자식 객체, 즉 고아 객체를 삭제한다.
수정이 필요하다.
22.01.04 기준아직 답을 찾지 못했다...대체 왜지? 그러나 REMOVE와 orphanRemoval을 비교하는 글은 남긴다.
키보드도 없는 양반이 어떻게...