在我工作的Sping Boot 项目中,我添加了Hibernate ORM plugin来启用实体中@Lob
字段的延迟加载,这在DB2中并不适用。延迟加载是有效的,当我检索对象时,LOB字段还没有加载。但是现在出现了一个新的问题,当我想要得到blob字段时,我得到了LazyInitializationException
。现在我做了一些调试和谷歌搜索。我尝试将@Transactional
添加到方法和类中,我还尝试了多个传播选项,但没有任何效果。
我还尝试直接使用EntityManager加载对象,但也给出了相同的异常:
Object object = entityManager.find(Object.class, id);
object.getLobField();
字符串
抛出的完整异常是:
org.hibernate.LazyInitializationException: Unable to perform requested lazy initialization [package.Object.lobField] - no session and settings disallow loading outside the Session
型
2条答案
按热度按时间8e2ybdfx1#
您需要在
application.yml
中激活字符串
这将允许延迟加载在创建具有延迟加载属性的对象的会话之外工作。
参考:https://www.baeldung.com/hibernate-lazy-loading-workaround、Solve Hibernate Lazy-Init issue with hibernate.enable_lazy_load_no_trans和https://vladmihalcea.com/the-hibernate-enable_lazy_load_no_trans-anti-pattern/
unhi4e5o2#
Hibernate有一个解决方法,enable_lazy_load_no_trans属性。启用此选项意味着每次获取惰性实体都将打开一个临时会话,并在单独的事务中运行
尝试添加以下属性
字符串