Rumah >Java >javaTutorial >Bagaimana untuk Menangani Masalah N 1 dengan Berkesan dalam JPA dan Hibernate?
Mengatasi Masalah N 1 di JPA dan Hibernate dengan Berkesan
Isu pertanyaan N 1 berlaku apabila pertanyaan awal mendapatkan semula rekod N, dan seterusnya pertanyaan dilaksanakan untuk mengambil rekod hubungan yang berkaitan bagi setiap rekod N ini. Mengatasi isu ini dalam Hibernate memerlukan pendekatan yang komprehensif.
Memahami Isu
Masalah pertanyaan N 1 timbul apabila anda mengambil rekod tanpa memulakan perhubungan yang berkaitan. Apabila anda kemudiannya cuba mengakses perhubungan itu, Hibernate melaksanakan pertanyaan tambahan untuk mendapatkan maklumat yang diperlukan. Ini mengakibatkan pertanyaan N 1 dilaksanakan dan bukannya satu pertanyaan.
Menyelesaikan Masalah
Untuk menyelesaikan isu ini dalam Hibernate, penyelesaian berkesan melibatkan penggunaan JOIN FETCH klausa. Dengan melampirkan klausa ini pada pertanyaan awal anda, anda boleh mengambil perhubungan yang menyebabkan isu ini dengan penuh semangat:
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();
Dalam kes di mana anda perlu mengambil berbilang persatuan kanak-kanak, anda dinasihatkan untuk mengambil satu koleksi dalam pertanyaan utama dan yang selebihnya dalam pertanyaan berasingan.
Mengautomasi Pengesanan
Untuk mengesan isu pertanyaan N 1 dengan lancar, memasukkan pernyataan JUnit automatik ke dalam ujian penyepaduan anda amat disyorkan. Alat seperti db-util menyediakan utiliti sumber terbuka untuk mengesahkan bilangan pernyataan SQL yang dijana, memastikan kod anda tidak disedari mengalami kesesakan prestasi ini.
Atas ialah kandungan terperinci Bagaimana untuk Menangani Masalah N 1 dengan Berkesan dalam JPA dan Hibernate?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!