Aşağıdaki etki alanı modeli göz önüne alındığında, ben Answer
kendi Value
s ve alt alt çocukları da dahil olmak üzere tüm s yüklemek ve AnswerDTO
sonra bir JSON dönüştürmek için bir koymak istiyorum . Çalışan bir çözümüm var ama bir ad-hoc kullanarak kurtulmak istediğim N + 1 probleminden muzdarip @EntityGraph
. Tüm ilişkilendirmeler yapılandırıldı LAZY
.
@Query("SELECT a FROM Answer a")
@EntityGraph(attributePaths = {"value"})
public List<Answer> findAll();
Yöntem @EntityGraph
üzerinde bir ad-hoc kullanarak ilişkide Repository
N + 1 önlemek için değerlerin önceden getirildiğinden emin olabilirim Answer->Value
. Sonucum iyi olsa da, temassız yükleme nedeniyle s selected
ilişkisini başka bir N + 1 sorunu var MCValue
.
Bunu kullanarak
@EntityGraph(attributePaths = {"value.selected"})
başarısız olur, çünkü selected
alan elbette bazı Value
varlıkların sadece bir parçasıdır :
Unable to locate Attribute with the the given name [selected] on this ManagedType [x.model.Value];
JPA'ya yalnızca selected
bir değer olması durumunda ilişkilendirmeyi getirmeyi denediğini nasıl anlayabilirim MCValue
? Gibi bir şeye ihtiyacım var optionalAttributePaths
.
selected
için bir 1. ve bu cevaplar için bir almak için bir 2. bir sorgu düşündümMCValue
. Bunun ek bir döngü gerektirmediğini ve veri kümeleri arasındaki eşlemeyi yönetmem gerektiğini sevmedim. Bunun için Hazırda Bekletme önbelleğinden yararlanma fikrinizi seviyorum. Sonuçları içermenin önbelleğe güvenmenin ne kadar güvenli olduğunu (tutarlılık açısından) açıklayabilir misiniz? Bir işlemde sorgular yapıldığında bu çalışır mı? Ben tespit etmek zor ve düzensiz tembel başlatma hataları korkuyorum.