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
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!
Kenyataan: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