Masalah Lazy Loading dengan @Lob dalam Spring dan Hibernate
Dalam aplikasi web yang menggunakan Spring dan Hibernate, rekod pangkalan data yang mengandungi data berkaitan fail adalah dipaparkan pada halaman web. Walaupun proses beroperasi dengan lancar apabila volum data adalah sederhana, kuantiti data yang berlebihan mencetuskan "OutOfMemoryError."
Sebagai langkah penyelesaian masalah awal, menetapkan sifat "blobField" kepada "null" menyelesaikan isu memori, membayangkan bahawa malas pemuatan tidak berkesan walaupun terdapat anotasi @Basic(fetch=FetchType.LAZY).
Penjelasan dan Penyelesaian
Menurut dokumentasi Hibernate, medan @Lob sememangnya malas dan melakukan tidak memerlukan anotasi Malas yang eksplisit. Walau bagaimanapun, tingkah laku yang tidak konsisten telah dilaporkan merentas pangkalan data dan pemacu.
Satu penyelesaian melibatkan teknik instrumentasi bytecode seperti Javassist atau Cglib.
Penyelesaian Disyorkan
Kepada menangani isu ini dengan pasti, adalah dicadangkan untuk menyusun semula pemetaan data. Daripada menggunakan sifat, buat pemetaan satu sama satu "palsu". Alih keluar medan LOB daripada kelas utama, wujudkan kelas baharu yang merujuk jadual dan kunci utama yang sama tetapi hanya mengandungi medan LOB yang diperlukan. Tandai pemetaan ini sebagai satu sama satu, ambil pilih dan malas benar. Pendekatan ini memastikan pemuatan malas semasa objek induk kekal dalam sesi.
Atas ialah kandungan terperinci Mengapa Lazy Loading Gagal untuk Medan @Lob pada Musim Bunga dan Hibernate?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!