Rumah >Java >javaTutorial >Bagaimana Anda Boleh Menangani Isu Pertanyaan N 1 dalam JPA dan Hibernate?

Bagaimana Anda Boleh Menangani Isu Pertanyaan N 1 dalam JPA dan Hibernate?

Susan Sarandon
Susan Sarandonasal
2024-11-17 07:40:03199semak imbas

How Can You Address the N 1 Query Issue in JPA and Hibernate?

Mengatasi Isu N 1 dalam JPA dan Hibernate

Dalam JPA dan Hibernate, isu pertanyaan N 1 timbul apabila berbilang pertanyaan dilaksanakan kepada mendapatkan semula data berkaitan, mengakibatkan pengambilan data tidak cekap. Untuk menyelesaikan masalah ini, Hibernate menyediakan pelbagai teknik.

Memahami Masalah N 1

Isu berlaku apabila pertanyaan awal mendapatkan semula entiti utama dan pertanyaan seterusnya dicetuskan untuk mengambil data berkaitan. Contohnya, mengambil entiti PostComment tanpa mengambil awal entiti Post yang berkaitan akan memaksa Hibernate untuk melaksanakan pertanyaan tambahan untuk setiap contoh Post yang diakses.

Penyelesaian dalam Hibernate

1. Sertai Pengambilan:

Dengan menggunakan strategi "sertai ambil", data yang berkaitan boleh diambil bersama entiti utama dalam satu pertanyaan. Dalam contoh kita, kita boleh menggunakan:

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

2. Prefetching Koleksi:

Apabila mengambil koleksi entiti utama dan koleksi tambahan data berkaitan, anda dinasihatkan untuk mengambil yang terakhir. Satu pilihan ialah mengambil semula koleksi dalam pertanyaan awal:

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

List postTags = entityManager.createQuery("select pt from PostTag pt where pt.post in (:commentPosts)", PostTag.class)
    .setParameter("commentPosts", comments)
    .getResultList();

3. Pertanyaan Sekunder:

Dalam kes di mana prapengambilan tidak cekap atau berbilang persatuan kanak-kanak perlu diambil, strategi pertanyaan kedua boleh digunakan. Dapatkan semula entiti utama dengan pertanyaan asas dan gunakan pertanyaan seterusnya untuk mengambil data yang berkaitan.

Pengesanan Automatik dengan db-util

Pustaka db-util menyediakan cara automatik untuk mengesan isu pertanyaan N 1. Penegasan JUnit boleh digunakan untuk mengesahkan kiraan yang dijangkakan bagi pernyataan SQL yang dijana, menangkap masalah pada awal proses pembangunan.

Atas ialah kandungan terperinci Bagaimana Anda Boleh Menangani Isu 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