OrderSheet 와 OrderHistory의 관계는 OneToOne 이고 지연로딩으로 설정해놨다.
위의 findWithOrderSheetByUserId()
를 호출하면 해당 쿼리 이후에 아래와 같이 orderHistory의 select 쿼리가 나간다...
orderHistory를 이용하는 코드도 없는데 왜 그럴까..
JPA에서 OneToOne 관계에서의 Lazt Loading 발동 조건
특정 조건을 모두 만족해야지만 지연 로딩이 동작하고 이외에는 FetchType을 LAZY로 지정하더라도 즉시 로딩으로 동작한다.
1:1 관계에서 null이 허용되는 경우, 프록시 형태로 null 객체를 반환할 수 없기 때문이다. (프록시 객체는 실제 엔티티 객체를 참조하고 있다.)
내 프로젝트에서는 OrderHistory에서 OrderSheet을 참조하는 것만으로 충분해 보여서 단방향 매핑으로 변경해주었다. OrderSheet를 통해 OrderHistory를 접근할 일은 현재로선 없어보인다.
https://thorben-janssen.com/hibernate-tip-lazy-loading-one-to-one/ 영상을 보니 1:1관계에서 지연로딩을 지원하는 방법을 소개 한다. 필요할 때 참고하면 좋을거 같다.