Spring 和 Hibernate 中 @Lob 的延迟加载问题
在使用 Spring 和 Hibernate 的 Web 应用程序中,包含文件相关数据的数据库记录是呈现在网页上。虽然当数据量适中时该过程运行顺利,但过多的数据量会触发“OutOfMemoryError”。
作为初始故障排除步骤,将“blobField”属性设置为“null”解决了内存问题,这意味着惰性尽管有 @Basic(fetch=FetchType.LAZY) 注解,加载还是无效。
解释和解决方法
根据 Hibernate 文档,@Lob 字段本质上是惰性的,并且不需要显式的惰性注释。但是,数据库和驱动程序之间的行为不一致。
一种解决方案涉及 Javassist 或 Cglib 等字节码检测技术。
推荐解决方案
至为了可靠地解决这个问题,建议重构数据映射。不要利用属性,而是创建“假”一对一映射。从主类中删除 LOB 字段,建立引用相同表和主键但仅包含必要的 LOB 字段的新类。将这些映射标记为一对一、获取选择和惰性 true。这种方法可确保在父对象保留在会话中时延迟加载。
以上是为什么 Spring 和 Hibernate 中的 @Lob 字段延迟加载失败?的详细内容。更多信息请关注PHP中文网其他相关文章!