Rumah  >  Artikel  >  pangkalan data  >  Mengapa Lazy Loading of Blob Fields dalam Spring dan Hibernate Tidak Berfungsi Seperti Yang Dijangkakan?

Mengapa Lazy Loading of Blob Fields dalam Spring dan Hibernate Tidak Berfungsi Seperti Yang Dijangkakan?

Patricia Arquette
Patricia Arquetteasal
2024-11-03 17:51:29324semak imbas

Why is Lazy Loading of Blob Fields in Spring and Hibernate Not Working as Expected?

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:

  • Pemacu Pangkalan Data: Sesetengah pemacu pangkalan data mungkin tidak menyokong pemuatan BLOB yang malas sepenuhnya.
  • Instrumentasi Bytecode: Menggunakan instrumentasi bytecode (cth., Javassist atau CGLib) telah dilaporkan kepada meningkatkan prestasi pemuatan malas.
  • Selesai Pemetaan Satu-dengan-Satu: Sebagai penyelesaian yang disyorkan, anda boleh mencipta entiti khusus untuk memegang medan BLOB, dipetakan sebagai satu-sama-satu yang malas hubungan dengan entiti utama anda. Pendekatan ini harus memastikan bahawa BLOB hanya diambil apabila perlu.

Untuk menyelesaikan isu anda, pertimbangkan langkah berikut:

  1. Sahkan bahawa pemacu pangkalan data anda menyokong penuh pemuatan malas daripada BLOB.
  2. Jika perlu, dayakan instrumentasi bytecode dalam konfigurasi Hibernate anda.
  3. Jika langkah di atas tidak menyelesaikan isu, laksanakan penyelesaian pemetaan satu sama satu yang disyorkan.

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!

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