Rumah > Java > javaTutorial > teks badan

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

Susan Sarandon
Lepaskan: 2024-11-17 07:40:03
asal
120 orang telah melayarinya

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();
Salin selepas log masuk

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();
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan