테스트를 하는 도중 remove() 가 아무런 에러도 없이
작동하지 않는 문제가 발생했다.
에러에 관한 로그도 찍히지 않아서 난감했다.
이걸로 두시간정도를 날린 듯 하다...
원인은 간단했다.
A 와 B 라는 엔티티이 있다.
이 둘은 OneToOne 단방향 관계였다.
A <- (참조) - B
그래서 A는 B를 필드로 갖지 않는다.
대신 B는 A를 필드로 갖고 A의 기본키에 조인한다.
여기다가 CasacadeType ALL 을 지정한게 원인이었다.
구글링 했더니 스택오버플로우에 비슷한 문제를 묻는 글이 있었다.
연관돼있는 두 엔티티중에 한 엔티티가 CascadeType Persist 를 갖고 있다면 이 엔티티가 먼저 삭제되고 다른 엔티티가 삭제될때 삭제되지 않는다는 것이었다.
왜 그런지는 나와있지 않고 Jpa 스펙에 이렇게 정의돼있다고 한다.
문제는 발생했는데 원인을 내가 직접 찾아야 하는 상황이엇다.
사용자 입장에서 이런 상황은 참 끔찍하지 않을 수 없다.
반대로 내 서비스를 경험하는 사용자도 이런 경험을 할 수 있다.
주의하자.