Rumah > Java > javaTutorial > Patutkah Anda Menggunakan Sesi Terbuka Hibernate dalam Corak Pandangan?

Patutkah Anda Menggunakan Sesi Terbuka Hibernate dalam Corak Pandangan?

Mary-Kate Olsen
Lepaskan: 2024-11-25 10:39:15
asal
949 orang telah melayarinya

Should You Use Hibernate's Open Session in View Pattern?

Kelemahan Sesi Terbuka Hibernate dalam Corak Paparan

Corak Hibernate Open Session in View (OSIV) mengekalkan sesi terbuka sepanjang permintaan kitaran hayat. Walaupun pendekatan ini kelihatan mudah, ia membawa beberapa masalah:

1. Kekurangan Kawalan Transaksi
OSIV membenarkan manipulasi data di luar transaksi terurus, yang membawa kepada ketidakkonsistenan data. Setiap pernyataan yang dilaksanakan semasa pemaparan UI berlaku dalam mod autokomit, meningkatkan overhed I/O dan berpotensi menjejaskan prestasi pangkalan data.

2. Campuran Kebimbangan
OSIV mengaburkan pemisahan antara perkhidmatan dan lapisan UI, kerana pernyataan dijana oleh kedua-duanya. Ini merumitkan ujian dan menjadikannya lebih sukar untuk mengasingkan lapisan.

3. Isu Prestasi Pertanyaan N 1
OSIV mengehadkan lapisan UI untuk menavigasi persatuan, yang boleh mengakibatkan masalah pertanyaan N 1. Walaupun Hibernate menyediakan mitigasi seperti @BatchSize dan FetchMode.SUBSELECT, ia menjejaskan pelan pengambilan lalai dan mungkin tidak optimum untuk semua senario.

4. Pengurusan Sumber
OSIV memastikan sambungan pangkalan data dibuka sepanjang fasa pemaparan UI. Pajakan sambungan lanjutan ini boleh mewujudkan kesesakan dalam kumpulan sambungan, mengehadkan kebolehskalaan dan daya pemprosesan.

Alternatif kepada OSIV

Untuk mengelakkan LazyLoadExceptions semasa menangani had OSIV, pertimbangkan perkara ini strategi alternatif:

  • Bersemangat Mengambil: Mulakan semua perkaitan yang diperlukan dengan penuh semangat dalam lapisan perkhidmatan untuk mengelakkan ralat memuatkan malas.
  • FetchMode.JOIN: Gunakan FetchMode.JOIN dalam pertanyaan untuk memuatkan perkaitan tertentu dengan bersemangat.
  • Pengambilan Kelompok: Gunakan @BatchSize untuk mendapatkan semula persatuan dalam kelompok dan meningkatkan prestasi.
  • Unjuran DTO: Cipta DTO (Objek Pemindahan Data) yang merangkum data yang berkaitan tanpa memasukkan persatuan yang malas.

Melumpuhkan OSIV dalam But Spring

Pada Musim Bunga Boot, OSIV didayakan secara lalai. Untuk melumpuhkannya, tambahkan sifat berikut pada fail konfigurasi application.properties anda:

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

Dengan melumpuhkan OSIV, anda boleh mengawal pengambilan data dengan lebih baik, memastikan integriti transaksi dan meningkatkan prestasi aplikasi.

Atas ialah kandungan terperinci Patutkah Anda Menggunakan Sesi Terbuka Hibernate dalam Corak Pandangan?. 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