Java
JPA] @OneToOne lazy loading
ParkCheolu
2022. 8. 22. 09:51
또 자꾸 헷갈려서 정리
JPA 에서, 관계를 맺는 데이터가 존재하는지 여부를 알 수 있는 방법이 직접 조회(select) 외엔 없다면, lazy loading 이 작동하지 못한다. (이 이유는 null 데이터에 대해 프록시를 생성할 수 없기 때문이다. 자세한 내용은 인터넷에 많으므로 생략.)
@OneToOne 에서, 다음의 조건을 만족한다면 lazy loading 이 작동한다.
1. (단방향/양방향에 관계 없이) FK 를 가진 쪽(관계의 주인)에서 조회한다.
- FK 가 null 이면 데이터가 없다고 판단할 수 있으므로, lazy loading 이 작동한다.
2. FK 를 가지진 않았지만 optional = false 이다.
- FK 를 가지고 있지는 않지만 optional = false, 즉 이 관계는 필수임이 명시되어 있어 JPA 는 반드시 대상 데이터가 존재한다고 판단할 수 있다.
OneToOne 이 아닌 다른 관계에서도 어쨌든 핵심은 관계하는 대상 데이터의 존재 여부를 미리 알 수 있느냐 이다. 알 수 있다면 lazy loading 은 작동할 것이고, 아니라면 작동하지 못할 것이다.
레퍼런스: