在我正在作業的一個 Spring Boot 專案中,我添加了Hibernate ORM 插件以啟用物體中欄位的延遲加載@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
uj5u.com熱心網友回復:
你需要在你的激活application.yml
spring:
jpa:
properties:
hibernate:
enable_lazy_load_no_trans: true
這將允許延遲加載在創建具有延遲加載屬性的物件的會話之外作業。
參考:https ://www.baeldung.com/hibernate-lazy-loading-workaround ,通過 hibernate.enable_lazy_load_no_trans和https://vladmihalcea.com/the-hibernate-enable_lazy_load_no_trans-anti-pattern/解決 Hibernate Lazy-Init 問題
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/428674.html
