Rumah > Java > javaTutorial > Patutkah Saya Menggunakan Sesi Terbuka Hibernate dalam Strategi Paparan?

Patutkah Saya Menggunakan Sesi Terbuka Hibernate dalam Strategi Paparan?

Linda Hamilton
Lepaskan: 2024-12-29 04:44:10
asal
171 orang telah melayarinya

Should I Use Hibernate's Open Session in View Strategy?

Kelemahan Sesi Terbuka Hibernate dalam Amalan Paparan

Gambaran Keseluruhan

Strategi Sesi Terbuka Hibernate dalam Paparan (OSIV) disertakan dengan beberapa kelemahan, terutamanya dalam persekitaran berbilang JVM dan apabila transaksi segera dilakukan diingini. Walaupun kemudahan yang ditawarkannya dalam aplikasi JVM tunggal, pakar menasihatkan agar tidak menggunakannya.

Isu dengan OSIV

Kebimbangan utama OSIV berpunca daripada pendekatan yang tidak lazim terhadap pengambilan data. Ia memastikan Konteks Kegigihan terbuka semasa pemaparan UI, membolehkan perkaitan malas dimulakan atas permintaan. Ini membawa kepada pelbagai kelemahan:

  • Autokomit pada Render: Selepas urus niaga lapisan perkhidmatan selesai, sebarang kenyataan berikutnya yang dicetuskan oleh pemaparan UI dilaksanakan dalam mod autokomit, meletakkan yang tidak diperlukan muatkan pada pelayan pangkalan data.
  • Kabur Kebimbangan: Pemisahan kebimbangan antara perkhidmatan dan lapisan UI menjadi kabur, menjadikan ujian dan pengasingan lebih sukar.
  • Potensi untuk Pertanyaan N 1: Had lapisan UI boleh membawa kepada N 1 masalah pertanyaan, menjejaskan prestasi.
  • Pajakan Sambungan Isu: OSIV memegang sambungan pangkalan data sepanjang pemaparan UI, mengehadkan pemprosesan transaksi dan berpotensi menyebabkan kesesakan kumpulan.

Mengelakkan LazyLoadExceptions

Daripada bergantung pada OSIV, strategi alternatif boleh digunakan untuk mencegah LazyLoadExceptions:

  • Mengambil Persatuan: Mulakan perkaitan secara eksplisit semasa panggilan kaedah perkhidmatan.
  • Ambil Baca sahaja: Tandai senarai persatuan sebagai dibaca -hanya untuk mengelakkan perkara yang tidak dijangka proksi.
  • Pengambilan Kelompok: Gunakan @BatchSize dan FetchMode.SUBSELECT untuk mengoptimumkan pengambilan.
  • Pertanyaan Lapisan Akses Data (DAL): Tersuai kraf Pertanyaan DAL yang mentakrifkan pengambilan data dengan tepat keperluan.

Melumpuhkan OSIV dalam But Spring

Dalam But Spring, OSIV didayakan secara lalai. Untuk melumpuhkannya, tambahkan baris berikut pada fail application.properties:

spring.jpa.open-in-view=false
Salin selepas log masuk

Ini melumpuhkan OSIV, membenarkan pembangun mengendalikan LazyLoadExceptions dengan cara yang lebih sesuai.

Atas ialah kandungan terperinci Patutkah Saya Menggunakan Sesi Terbuka Hibernate dalam Strategi Paparan?. 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