"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Por qué la carga diferida de campos de blobs en primavera e hibernación no funciona como se esperaba?

¿Por qué la carga diferida de campos de blobs en primavera e hibernación no funciona como se esperaba?

Publicado el 2024-11-07
Navegar:223

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

Campos de blobs de carga diferida en Spring e Hibernate

Cuando se trata de grandes datos binarios (BLOB) en tablas de bases de datos, es importante optimizar su recuperación para evitar problemas de rendimiento y consumo de memoria. Un enfoque es utilizar la carga diferida, que permite recuperar los datos solo cuando es necesario. Sin embargo, esta técnica a veces puede plantear desafíos con Hibernate y Spring.

En su situación, ha configurado su base de datos, Spring beans y clase de entidad de la siguiente manera:

Configuración de la base de datos (porciones relevantes):



  

Clase de entidad (anotación relevante):

@Lob
@Basic(fetch = FetchType.LAZY)
@Column(name = "BlobField", columnDefinition = "LONGBLOB")
@Type(type = "org.springframework.orm.hibernate3.support.BlobByteArrayType")
private byte[] blobField;

A pesar de marcar el blobField como diferido, te encuentras con un OutOfMemoryError al recuperar grandes cantidades de datos. Esto sugiere que el mecanismo de carga diferida no se comporta como se esperaba.

Según la documentación y las experiencias de los usuarios, a continuación se detallan algunos factores que pueden influir en la carga diferida de BLOB:

  • Controlador de base de datos: Es posible que algunos controladores de bases de datos no admitan completamente la carga diferida de BLOB.
  • Instrumentación de código de bytes: Se ha informado que se utiliza instrumentación de código de bytes (por ejemplo, Javassist o CGLib) mejorar el rendimiento de la carga diferida.
  • Solución alternativa de asignación uno a uno: Como solución alternativa recomendada, puede crear una entidad dedicada para contener campos BLOB, asignada como una carga diferida uno a uno. relación con su entidad principal. Este enfoque debería garantizar que los BLOB solo se recuperen cuando sea necesario.

Para resolver el problema, considere los siguientes pasos:

  1. Verifique que el controlador de su base de datos sea totalmente compatible con la carga diferida de BLOB.
  2. Si es necesario, habilite la instrumentación de código de bytes en su configuración de Hibernate.
  3. Si los pasos anteriores no resuelven el problema, implemente la solución alternativa recomendada de mapeo uno a uno.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3