ด้วยรูปแบบโดเมนต่อไปนี้ฉันต้องการโหลดAnswers ทั้งหมดรวมถึงValues และ sub-children ที่เกี่ยวข้องและวางลงในAnswerDTOเพื่อแปลงเป็น JSON ฉันมีวิธีการแก้ปัญหาการทำงาน แต่มันทนทุกข์ทรมานจากปัญหา N + 1 @EntityGraphที่ฉันต้องการที่จะกำจัดโดยใช้เฉพาะกิจ LAZYสมาคมทั้งหมดมีการกำหนดค่า
@Query("SELECT a FROM Answer a")
@EntityGraph(attributePaths = {"value"})
public List<Answer> findAll();
ใช้ ad-hoc @EntityGraphบนRepositoryวิธีการที่ฉันสามารถมั่นใจได้ว่าค่าถูกดึงมาล่วงหน้าเพื่อป้องกัน N + 1 ในการAnswer->Valueเชื่อมโยง ในขณะที่ผลลัพธ์ของฉันดีมีปัญหาอีก N + 1 เพราะขี้เกียจโหลดความselectedสัมพันธ์ของMCValues
ใช้สิ่งนี้
@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ฉันต้องการสิ่งที่ต้องการ

selectedMCValueฉันไม่ชอบสิ่งนี้จะต้องวนซ้ำเพิ่มเติมและฉันจะต้องจัดการการแมประหว่างชุดข้อมูล ฉันชอบความคิดของคุณในการใช้ประโยชน์จากแคชไฮเบอร์เนตสำหรับสิ่งนี้ คุณสามารถอธิบายรายละเอียดเกี่ยวกับความปลอดภัย (ในแง่ของความสอดคล้อง) ว่าต้องอาศัยแคชเพื่อเก็บผลลัพธ์ได้อย่างไร มันใช้งานได้เมื่อมีการสอบถามในการทำธุรกรรมหรือไม่? ฉันกลัวว่าจะพบข้อผิดพลาดในการเริ่มต้นขี้เกียจอย่างหนักเป็นระยะ