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

Bagaimana untuk Menyelesaikan Masalah Pertanyaan N 1 dalam JPA dan Hibernate?

Susan Sarandon
Susan Sarandonasal
2024-11-11 12:23:031007semak imbas

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

Apakah Penyelesaian untuk Isu N 1 di JPA dan Hibernate?

Masalah Pertanyaan N 1

The Isu pertanyaan N 1 timbul apabila pertanyaan mendapatkan semula N rekod dan pertanyaan seterusnya diperlukan untuk mengambil entiti berkaitan, mengakibatkan pertanyaan N 1.

Cara Menyelesaikan Isu N 1 dalam Hibernate

Untuk menyelesaikan isu ini, adalah penting untuk membolehkan pengelogan SQL yang betul untuk mengesan masalah .

Menggunakan JOIN FETCH

The penyelesaian utama ialah menggunakan JOIN FETCH Hibernate untuk memuatkan entiti yang berkaitan dengan penuh semangat dalam pertanyaan awal. Ini boleh dicapai dengan mengubah suai pertanyaan seperti berikut:

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

Pertimbangan Tambahan

Jika berbilang persatuan kanak-kanak perlu diambil, pertimbangkan untuk mengambil satu koleksi pada permulaan pertanyaan dan koleksi tambahan dengan pertanyaan berasingan.

Pengesanan Automatik dengan JUnit

Ujian integrasi boleh digunakan untuk mengesan isu pertanyaan N 1 secara automatik. Menggunakan rangka kerja seperti db-util boleh membantu dalam mengesahkan kiraan jangkaan penyata SQL yang dijana.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Masalah Pertanyaan 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