ด้วยรูปแบบโดเมนต่อไปนี้ฉันต้องการโหลดAnswer
s ทั้งหมดรวมถึงValue
s และ 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
สัมพันธ์ของMCValue
s
ใช้สิ่งนี้
@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
ฉันไม่ชอบสิ่งนี้จะต้องวนซ้ำเพิ่มเติมและฉันจะต้องจัดการการแมประหว่างชุดข้อมูล ฉันชอบความคิดของคุณในการใช้ประโยชน์จากแคชไฮเบอร์เนตสำหรับสิ่งนี้ คุณสามารถอธิบายรายละเอียดเกี่ยวกับความปลอดภัย (ในแง่ของความสอดคล้อง) ว่าต้องอาศัยแคชเพื่อเก็บผลลัพธ์ได้อย่างไร มันใช้งานได้เมื่อมีการสอบถามในการทำธุรกรรมหรือไม่? ฉันกลัวว่าจะพบข้อผิดพลาดในการเริ่มต้นขี้เกียจอย่างหนักเป็นระยะ