Rumah > Java > javaTutorial > teks badan

Bagaimanakah Kami Boleh Menangani Isu Pertanyaan N 1 dalam JPA dan Hibernate?

Susan Sarandon
Lepaskan: 2024-11-13 06:26:02
asal
983 orang telah melayarinya

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

Menangani Isu Pertanyaan N 1 dalam JPA dan Hibernate

Masalah N 1 timbul apabila pertanyaan mendapatkan semula N rekod dan pertanyaan berikutnya diambil berkaitan rekod, membawa kepada N pertanyaan tambahan. Ini boleh berlaku dalam Hibernate apabila perkaitan tidak diambil semasa pertanyaan awal.

Punca dan Kesan

Untuk menggambarkan, pertimbangkan pertanyaan JPA ini yang mendapatkan semula entiti PostComment:

List<PostComment> comments = entityManager.createQuery("select pc from PostComment pc where pc.review = :review", PostComment.class)
.setParameter("review", review)
.getResultList();
Salin selepas log masuk

Jika kami kemudiannya mengulangi ulasan dan mengakses perkaitan siaran, Hibernate akan mengeluarkan pernyataan SQL berikut:

SELECT pc.id AS id1_1_, pc.post_id AS post_id3_1_, pc.review AS review2_1_
FROM   post_comment pc
WHERE  pc.review = 'Excellent!'

INFO - Loaded 3 comments

SELECT pc.id AS id1_0_0_, pc.title AS title2_0_0_
FROM   post pc
WHERE  pc.id = 1

INFO - The post title is 'Post nr. 1'

SELECT pc.id AS id1_0_0_, pc.title AS title2_0_0_
FROM   post pc
WHERE  pc.id = 2

INFO - The post title is 'Post nr. 2'

SELECT pc.id AS id1_0_0_, pc.title AS title2_0_0_
FROM   post pc
WHERE  pc.id = 3

INFO - The post title is 'Post nr. 3'
Salin selepas log masuk

Di sini, tiga pertanyaan tambahan dilaksanakan untuk mengambil entiti Post untuk setiap Komen. Ini ialah isu pertanyaan N 1.

Resolusi

Untuk menyelesaikannya, kami boleh mengambil perkaitan yang diperlukan dengan penuh semangat menggunakan kata kunci JOIN FETCH:

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

Untuk berbilang persatuan kanak-kanak, disyorkan untuk mengambil satu koleksi dalam pertanyaan awal dan memuatkan selebihnya melalui pertanyaan kedua.

Pengesanan Automatik

Untuk mengesan N 1, adalah berfaedah untuk melaksanakan ujian penyepaduan dengan pengelogan SQL dan menegaskan untuk mengesahkan bilangan jangkaan penyata SQL yang dijana. Alat seperti db-util boleh membantu dalam proses ini.

Atas ialah kandungan terperinci Bagaimanakah Kami 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