Rumah >Java >javaTutorial >Bagaimana untuk Menyelesaikan Masalah N 1 dalam JPA dan Hibernate?

Bagaimana untuk Menyelesaikan Masalah N 1 dalam JPA dan Hibernate?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-14 18:54:02742semak imbas

How to Solve the N 1 Problem in JPA and Hibernate?

Menangani Masalah N 1 dalam JPA dan Hibernate

Isu N 1 timbul apabila pertanyaan yang berlebihan dilaksanakan untuk mendapatkan data hubungan. Sebagai contoh, dalam Hibernate, pertanyaan awal mengambil N rekod dan N pertanyaan tambahan diperlukan untuk mendapatkan semula rekod yang berkaitan bagi setiap satu.

Untuk menyelesaikan masalah ini, gunakan JOIN FETCH:

List<PostComment> comments = entityManager.createQuery(
    "select pc from PostComment pc join fetch pc.post p where pc.review = :review"
)
.setParameter("review", review)
.getResultList();

JOIN FETCH ini akan mengambil persatuan siaran, menghapuskan pertanyaan N 1.

Jika berbilang persatuan kanak-kanak perlu mengambil, mengambil satu koleksi dalam pertanyaan awal dan yang lain dengan pertanyaan berikutnya.

Pengesanan Automatik

Ujian integrasi sesuai untuk mengesan isu N 1. Projek db-util menyediakan penegasan JUnit automatik untuk mengesahkan kiraan jangkaan pernyataan SQL yang dijana:

@Test
public void shouldNotHaveANPlusOneQuery() {
    // code to configure and execute db-util

    Assert.assertCountOfSqlStatementsPerformed(1);
}

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Masalah N 1 dalam JPA dan Hibernate?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn