OpenSessionInView: A Cautionary Tale in Spring Boot
Properti spring.jpa.open-in-view dalam Spring Boot telah menjadi sumber kekeliruan bagi banyak pemaju. Mari kita mendalami tujuan, nilai lalai dan kemungkinan akibatnya.
Apakah itu OpenSessionInView?
OpenSessionInView (OSIV) ialah ciri yang memastikan EntityManagerFactory dibuka semasa keseluruhan permintaan -kitaran tindak balas. Ini membenarkan Hibernate (pembekal kegigihan yang mendasari) untuk memulakan entiti malas dimuatkan secara automatik, walaupun apabila transaksi telah dilakukan.
Nilai Lalai
Dalam Spring Boot 2.0 dan lebih awal, OSIV didayakan secara lalai jika tidak ditetapkan secara eksplisit. Ini terutamanya untuk keserasian ke belakang dengan versi Hibernate yang lebih lama yang memerlukan OSIV berfungsi dengan betul.
Kejatuhan OSIV
Walaupun bertujuan untuk memudahkan pemulaan objek, OSIV boleh mengakibatkan ketara isu prestasi dan had kebolehskalaan:
Lumpuhkan OSIV
Untuk melumpuhkan OSIV dan memulihkan pengurusan sumber yang betul, tetapkan spring.jpa.open-in-view=false dalam application.properties anda fail.
LazyInitializationException
Jika anda melumpuhkan OSIV, anda mungkin menghadapi LazyInitializationException apabila mengakses entiti yang dimuatkan malas. Untuk menyelesaikan masalah ini, gunakan anotasi @Fetch Hibernate atau pengambilan bersemangat eksplisit dalam pertanyaan JPQL anda.
Kesimpulan
OpenSessionInView mungkin kelihatan seperti cara yang mudah untuk mengelakkan pengecualian permulaan yang malas, tetapi potensi kelemahannya melebihi faedahnya. Dalam aplikasi Spring Boot moden, OSIV harus dilumpuhkan untuk memastikan prestasi optimum dan penggunaan sumber.
Atas ialah kandungan terperinci Sekiranya Anda Menggunakan OpenSessionInView Spring Boot?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!