Lazy Loading Blob Fields in Spring and Hibernate
Apabila berurusan dengan data binari besar (BLOB) dalam jadual pangkalan data, adalah penting untuk mengoptimumkan mereka mendapatkan semula untuk mengelakkan isu prestasi dan penggunaan memori. Satu pendekatan ialah menggunakan pemuatan malas, yang membolehkan data diambil hanya apabila ia diperlukan. Walau bagaimanapun, teknik ini kadangkala boleh menimbulkan cabaran dengan Hibernate dan Spring.
Dalam situasi anda, anda telah mengkonfigurasikan pangkalan data anda, Spring beans dan kelas entiti seperti berikut:
Konfigurasi Pangkalan Data (bahagian yang berkaitan):
<code class="xml"><bean id="lobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler" /> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="lobHandler" ref="lobHandler" /> </bean></code>
Kelas Entiti (anotasi yang berkaitan):
<code class="java">@Lob @Basic(fetch = FetchType.LAZY) @Column(name = "BlobField", columnDefinition = "LONGBLOB") @Type(type = "org.springframework.orm.hibernate3.support.BlobByteArrayType") private byte[] blobField;</code>
Walaupun menandakan blobField sebagai malas, anda menghadapi OutOfMemoryError apabila mendapatkan semula sejumlah besar data. Ini menunjukkan bahawa mekanisme pemuatan malas tidak berfungsi seperti yang diharapkan.
Berdasarkan dokumentasi dan pengalaman pengguna, berikut ialah beberapa faktor yang boleh mempengaruhi pemuatan malas BLOB:
Untuk menyelesaikan isu anda, pertimbangkan langkah berikut:
Atas ialah kandungan terperinci Mengapa Lazy Loading of Blob Fields dalam Spring dan Hibernate Tidak Berfungsi Seperti Yang Dijangkakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!