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
Linda Hamiltonasal
2024-12-06 01:30:13727semak imbas

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

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