Hazırda bekletme ipucu: Başlangıç olarak nasıl davet edilmelidir?
Tipps Hibernate serisi, hazırda bekletme sorularını yaymak için hızlı ve basit çözümler sunuyor. Bu kez davet edilen tembel ilişkilerin ideal başlatılmasıdır.
Sormak
Bir varlığı bire yüklediğimde nasıl tembel bir ilişkiyi başlatabilirim? Tembelleştirme hariç Kaçınmak için?
Çözüm
Hazırda bekletme her zaman bir tane başlatır Tembelleştirme hariçBir ilişkinin unsurları aktif bir hazırda bekletme oturumu olmadan yüklenmelidir. Aşağıdaki örnekte olduğu gibi:
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
Author a = em.createQuery("SELECT a FROM Author a WHERE id = 1", Author.class).getSingleResult();
em.getTransaction().commit();
em.close();
log.info(a.getFirstName()+" "+a.getLastName()+" wrote "+a.getBooks().size()+" books.");
Bundan kaçınmak için, hazırda bekletme oturumunu kapatmadan önce rapor başlatılmalıdır. JPA ve Hibernate çeşitli seçenekler sunar. En basit olanı Getir'e katılın-Clause. Ek anahtar kelime Gitmek Varlıkların sadece bu sorgu için bağlanmaması gerektiğini, aynı zamanda birlikte yüklenmesi gerektiğini kış uykusuna kaydolun. Bu, ilişkiyi ve sonraki bir ilişkiyi başlatır Tembelleştirme hariç Önlendi.
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
Author a = em.createQuery("SELECT a FROM Author a JOIN FETCH a.books WHERE a.id = 1", Author.class).getSingleResult();
em.getTransaction().commit();
em.close();
log.info(a.getFirstName()+" "+a.getLastName()+" wrote "+a.getBooks().size()+" books.");
Başlatma hakkında daha fazla bilgi Leazy davet edildi İlişki
. Getir'e katılın-Clausel, tembel davet edilen ilişkileri başlatmak için mevcut seçeneklerden sadece biridir. Diğer seçenekler bir @NamedTityGraph veya oluşturulan bir geçici Varlık. Bunlar, sorguyla yüklenmesi gereken sorgudan bağımsız bir varlık grafiğinin tanımlanmasına izin verir.
Her üç seçenek de sadece önlemekle kalmaz Tembelleştirme hariç. Kuyu bilinen “n+1 Select” problemi onlarla da önlenebilir.
Hazırda Geri Gösterim İpuçları – Kitap
Basit ve karmaşık haritalama tanımları, kayıt, Java 8'in desteği, önbellek ve statik sorgu oluşturma ve dinamikler oluşturma gibi konularda 70'den fazla tarif “IberNament Önerileri: Artı Ortak Hazırda Bekleme Sorunlarına 70 Çözümler” kitabımda mevcuttur. Amazon'da cep ve e-kitap ve hibernate-tips.com'da PDF olarak mevcuttur.
()