Artikel ini merangkum empat cara untuk menyelesaikan masalah pemuatan malas hibernasi dalam proses belajar hibernate.
Yang disebut pemuatan malas adalah pemuatan yang tertunda, pemuatan yang tertunda.
Kapan Menggunakan Pemuatan Malas? Saya hanya bisa menjawab bahwa ketika Anda ingin menggunakan pemuatan malas, menggunakan pemuatan malas.
Adapun mengapa kita perlu menggunakan pemuatan malas, jelas bahwa ketika jumlah data yang ingin kita akses terlalu besar, jelas tidak cocok untuk menggunakan cache, karena kapasitas memori terbatas. Untuk mengurangi jumlah konkurensi dan mengurangi konsumsi sumber daya sistem, kami membiarkan data dimuat saat dibutuhkan, dan kemudian kami menggunakan pemuatan malas.
Misalnya, ada objek yang merupakan karyawan dan objek lain yaitu departemen. Jelas, bagi karyawan, ini adalah hubungan banyak-ke-satu dibandingkan dengan departemen, dan untuk departemen, ini adalah hubungan satu-ke-banyak dibandingkan dengan karyawan. Ketika kami menanyakan objek karyawan, jika kami ingin meminta departemen yang sesuai melalui departemen properti dari objek karyawan, pengecualian akan dilemparkan. Ini karena adanya pemuatan malas. Setelah sesi ditutup, Hibernate mengeluarkan permintaan lain ke database, dan pengecualian dilemparkan.
Berikut ini adalah empat cara untuk menyelesaikan masalah ini:
1. Inisialisasi eksplisit (di dalam metode kueri)
Saat bertanya kepada departemen mana seorang karyawan milik, Anda perlu melakukan pra-pertanyaan kepada departemen
Gunakan pernyataan
Hibernate.initialize (departemen.class);
2. Ubah file hubungan objek dan tulis ulang malas malas = false, yaitu, tutup malas memuat
Dua metode di atas memang dapat menyelesaikan masalah, tetapi kerugiannya adalah bahwa tidak peduli apakah objek digunakan nanti, hibernate akan mengeluarkan pernyataan SQL ke database untuk meminta data, menyebabkan limbah kinerja yang tidak perlu.
3. Gunakan filter (proyek web)
① Cara untuk mendapatkan sesi harus menggunakan getCurrentsession
Metode Metode Sesi Penutupan Spesial
public void dofilter (permintaan servletRequest, respons servletResponse, filterchain arg2) melempar ioException, servletException {// TODO Metode yang dihasilkan secara otomatis sesi stub sesi = null; Transaksi tx = null; coba {session = hibernateutil.getCurrentSession (); tx = session.begintransaction (); arg2.dofilter (permintaan, respons); // Permintaan terus -menerus terjadi tx.commit (); } catch (exception e) {// todo: menangani pengecualian if (tx! = null) {tx.rollback (); }} akhirnya {// metode penutupan khusus hibernateutil.closecurrentsession (); }}4. Dalam kerangka kerja SSH, gunakan OpenSessionView yang disediakan oleh Spring
Prinsipnya mirip dengan penggunaan filter dalam metode ketiga, kecuali bahwa filter ini disediakan oleh pegas. Saat menggunakannya, Anda hanya perlu mengonfigurasinya di file web.xml sebagai berikut:
<!-Gunakan Spring untuk memecahkan masalah pemuatan malas-> <nilter> <nilter-name> OpenSessionInviewFilter </tiler-name> <nilter-class> org.springframework.orm.hibernate. <rerl-pola>/*</url-pola> </filter-mapping>
Metode dalam 3 dan 4 juga dapat menyelesaikan masalah pemuatan malas, dan metode keempat juga digunakan lebih sering saat ini. Namun, kedua metode ini juga memiliki kelemahan. Kerugiannya adalah mereka memperpanjang waktu ketika sesi ditutup dan siklus hidup sesi menjadi lebih lama. Sebelum menggunakan metode ini, sesi ditutup setelah meminta data; Sekarang, sesi ditutup pada akhir permintaan web.
Meringkaskan
Di atas adalah semua tentang empat cara untuk menyelesaikan masalah pemuatan malas hibernate. Saya harap ini akan membantu semua orang. Teman yang tertarik dapat terus merujuk ke topik terkait lainnya di situs ini. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!