Rumah > Java > javaTutorial > Sesi Terbuka Hibernate dalam Paparan: Untuk Digunakan atau Tidak Digunakan?

Sesi Terbuka Hibernate dalam Paparan: Untuk Digunakan atau Tidak Digunakan?

Linda Hamilton
Lepaskan: 2024-12-06 01:30:13
asal
758 orang telah melayarinya

Hibernate Open Session in View: To Use or Not to Use?

Hibernate Open Sesi dalam Pandangan: Amalan Kontroversi

Pengenalan

Sesi Terbuka Dalam Pandangan (OSIV) ialah ciri Hibernate yang membenarkan sesi Hibernate kekal terbuka semasa permintaan-tindak balas kitaran. Amalan ini telah menjadi topik perdebatan dalam komuniti Java, dengan sesetengahnya menyokong untuk kemudahannya manakala yang lain mempersoalkan kelemahannya.

Isu dengan OSIV

OSIV mengemukakan beberapa cabaran :

  • Pengendalian Transaksi Tidak Konsisten: OSIV memastikan sesi dibuka selama-lamanya, memintas kitaran hayat transaksi biasa. Ini boleh membawa kepada akibat yang tidak diingini, seperti isu ketekalan data.
  • Kemerosotan Prestasi Pangkalan Data: Memastikan sesi terbuka memberi tekanan pada pangkalan data, kerana sebarang pernyataan tambahan yang dilaksanakan semasa pemprosesan respons (cth. , permulaan persatuan malas) dikeluarkan dalam mod autokomit.
  • Lapisan Kabur Pemisahan: OSIV mengaburkan pemisahan kebimbangan antara lapisan perniagaan dan fasa pemaparan UI, menjadikannya sukar untuk menguji dan mengekalkan aplikasi.
  • Meningkatkan Masa Pajakan Sambungan: Sesi boleh diadakan terbuka untuk tempoh yang panjang, mengehadkan kumpulan sambungan pangkalan data sumber.

Strategi Alternatif

Untuk mengelakkan isu ini, pembangun boleh menggunakan strategi alternatif:

  • Memulakan Secara Eksplisit Persatuan Malas: Mulakan persatuan malas dalam lapisan perkhidmatan menggunakan Sertai Ambil atau FetchMode.SUBSELECT.
  • Buat Pertanyaan DAO Berasingan: Tulis pertanyaan DAO khusus untuk lapisan UI yang disesuaikan untuk mengambil hanya perkaitan yang diperlukan.
  • Gunakan Paparan Unjuran: Buat unjuran yang hanya mengembalikan medan penting yang diperlukan untuk UI dan bukannya lengkap entiti.
  • Gunakan FetchMode.LAZY dan EAGER Memuat: Konfigurasikan FetchMode.LAZY untuk entiti yang tidak diperlukan serta-merta dan FetchMode.EAGER untuk persatuan yang mesti dimuatkan terlebih dahulu.

Melumpuhkan OSIV pada Musim Bunga But

Spring Boot mendayakan OSIV secara lalai. Untuk melumpuhkannya, tetapkan sifat berikut dalam fail application.properties:

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

Tetapan ini memastikan sesi Hibernate ditutup selepas setiap transaksi lapisan perkhidmatan, menghalang potensi kelemahan yang dikaitkan dengan OSIV.

Atas ialah kandungan terperinci Sesi Terbuka Hibernate dalam Paparan: Untuk Digunakan atau Tidak Digunakan?. 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