Bir proje listemiz ve bir müşteri listesi var. Bir proje bir müşteri için olabilir ve her müşterinin çok sayıda projesi olabilir. Bu yüzden projenin sahip olduğu basit bir 1: n ilişki var. esansiyel sadeleştirilmiş Bu bir N + 1 problm nedir ve nasıl düzeltebilirim?
ben projelerin bir listesini yüklediğinizde, aynı anda etkin bir şekilde müşterilere almak isteyen@Entity
public class Project {
@Id
long id;
@ManyToOne(optional = true)
@JoinColumn(name = "customer", nullable = true, updatable = true)
Customer customer;
}
@Entity
public class Customer {
@Id
long id;
}
olduğunu. Durum bu değil. Projeler için tek bir sorgu var ve daha sonra ayrı bir sorguyla karşılaşılan her farklı müşteri için düzenleniyor.
Yani 50 farklı müşteriye atanmış 100 projem var. Bu, projeler için bir sorgu ve müşteriler için 50 sorgu ile sonuçlanacaktır.
Bu, hızlı bir şekilde toplanır ve büyük proje/müşteri listeleri için başvurumuz oldukça yavaşlar. Ayrıca bu sadece bir örnektir. İlişkileri olan tüm varlıklarımız bu davranıştan etkilenir. here önerildiği gibi
Zaten customers
sahada @Fetch(FetchMode.JOIN)
denedik ama hiçbir şey yapmaz ve FetchMode.SUBQUERY
Hazırda için geçerli göre değil:
org.hibernate.AnnotationException: FetchMode.SUBSELECT Kullanımı Toone dernekler izin verilmeyen
Bu sorunu nasıl düzeltebilirim?
Bence bu N + 1 problem için varsayılan getir-tipi sanmıyorum senin 'ManyToOne' ilişkisi zaten' FetchType.EAGER' –