처음에 연관관계 편의 메서드를 쓰는 이유는 엔티티가 영속화되고 아직 디비에 반영이 되지 않은 상태에서 객체의 연관관계로 매핑되어 있는 다른 엔티티를 꺼내써야 하는 경우 매핑을 해주어야 하기 때문이라고 이해했다. 그래서 과연 두 엔티티 간에 편의 메서드를 어디에 두어야 하는가에 대한 고민을 한 결과 위 질문글에서 말해주신 대로 정답은 없고 어떤 객체를 중심으로 비즈니스 로직이 진행되는지에 따라 두면 된다라고 결론을 내렸다.
하지만 연관관계 편의 메서드를 쓰는 더 근본적인 이유를 까먹고 그냥 작성을 아얘 하지 않아 버렸다. 당연히 일단은 두 객체간에 연관관계를 맺기 위함인데
위와 같이 Member 측에서 history를 추가하는 것 외에도 history측에서도 member에 해당 Member를 할당을 안해주니까 당연히 영속성 전이에 문제가 생겼던 것이었다. 물론 이제 영속성 전이라는 것이 저장을 하면 Member에 저장이 되고 History도 저장은 되겠지만 내 테스트 코드와 같이 Member를 통해 History 조회시 Lazy 로딩이 되어있기 때문에 조회를 위해 별도 쿼리가 한번 더 나갈 것이고 여기에서 Member는 History와 연결이 되어있지만 History는 Member와 연결이 되어있지 않기 때문에 당연히 찾아질 수가 없다.
위 사진과 같이 History의 memberId로 Member와 join을 하려고 했지만 History에는 저장된 memberId가 없기 때문에 계속 테스트의 결과가 예상과는 달리 0이 뜨는 것이었다.
그리고 다시 테스트를 실행하면
성공하는 것을 볼 수 있다.
물론 이렇게 부모 엔티티에서 자식 엔티티를 관리하는 구조로 설계 시 orphanRemoval을 통한 고아 객체 제거도 잊으면 안된다!