[JPA] 그 유명한 1:N관계
문제발생 데이터 정규화를 너무 잘지켜서 엔티티를 만들다보면 join이 많이 필요해지는건 당연하다. 그만큼 필요한 정보의 분리가 잘 일어났다는 뜻이고, 데이터의 중복과 정합성이 보장된다는 뜻이니까. 그런데 JPA에서는 지연로딩 때문에 연관관계에 부담을 느끼게 된다. 같은 작업 프로세스 내에서 조회가 확정된 연관관계가 지연로딩 상태라면 추가적인 쿼리가 발생할 것이 뻔하기 때문이다. 보통의 경우에는 여러가지 해결법이 있지만 이번에 만들게 된 유사 설문조사 도메인에서는 1:N이 연쇄적으로 그리고 동시에 여러개를 한번에 조회해야하는 문제를 경험했다. 엔티티 연관관계 가정으로 최상단이 1 이 하나에 N개가 붙어있고 각각 M개가 붙어있고, 또 각각 K개가 붙어있다고 가정해보자. sol1: 추가쿼리? 상관없어 최상단 엔티티 조회후 그냥 원하는 엔티티 마음껏 조회. 이러면 모든 연관관계마다 추가쿼리가 나가게 된다. 가장 최악인것 같다. 이러면 NxMxK개 쿼리다. sol2: 상남자는 LAZY 보다는 EAGER지. 이런 방법도 있다. 지연로딩 대신 즉시로딩을 사용하게 된다면 프록시를 사용하지 않고 바로 연관된 모든 데이터를 가져오기 때문에 추가쿼리가 발생할 염려가 없다. fetch - FetchType (defaults to EAGER) Defines whether this attribute should be fetched eagerly or lazily. EAGER indicates that the value will be fetched as part of loading the owner. LAZY values are fetched only when the value is accessed. Jakarta Persistence requires providers to support EAGER, while support for LAZY is optional meaning that a provider is free to not support it. Hibernate supports lazy loading of basic values as long as you are using its bytecode enhancementsupport.
- JPA
예