다음 도메인 모델을 감안할 때 s 및 해당 하위 하위를 Answer포함한 모든을로드 하고 JSON으로 변환하려고합니다. 작동하는 솔루션이 있지만 ad-hoc을 사용하여 제거하려는 N + 1 문제가 발생합니다 . 모든 연결이 구성되었습니다 .ValueAnswerDTO@EntityGraphLAZY
@Query("SELECT a FROM Answer a")
@EntityGraph(attributePaths = {"value"})
public List<Answer> findAll();
방법 @EntityGraph에 ad-hoc 을 사용하면 연결 Repository에서 N + 1을 방지하기 위해 값을 프리 페치 할 수 Answer->Value있습니다. 내 결과는 괜찮지 만 s 의 selected연결이 느리게로드되어 또 다른 N + 1 문제가 MCValue있습니다.
이것을 사용하여
@EntityGraph(attributePaths = {"value.selected"})
selected필드는 물론 일부 Value엔티티 의 일부 이므로 실패합니다 .
Unable to locate Attribute with the the given name [selected] on this ManagedType [x.model.Value];
JPA selected가 값이 MCValue? 인 경우 연결을 가져 오도록 시도하는 방법은 무엇입니까? 와 같은 것이 필요합니다 optionalAttributePaths.

selected했습니다MCValue. 나는 이것이 추가적인 루프를 요구한다는 것을 싫어했고 데이터 세트 간의 매핑을 관리해야합니다. 나는 이것을 위해 Hibernate 캐시를 이용하는 아이디어를 좋아한다. 결과를 포함하기 위해 캐시에 의존하는 것이 얼마나 안전한지 (일관성 측면에서) 자세히 설명 할 수 있습니까? 트랜잭션에서 쿼리를 수행 할 때 작동합니까? 나는 발견하기 어려운 산발적 인 초기화 오류를 두려워합니다.