MyBaits延遲載入失效解決之道
阿新 • • 發佈:2019-02-02
遇到現象
- 延遲載入不起作用
- 呼叫查到物件的toString()方法觸發延遲載入
解決辦法
- 延遲載入不起作用的解決辦法
在MyBaits的configuration xml檔案中的configuration植物中增加以下配置:
<settings>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
lazyLoadingEnabled
此屬性控制是否啟用延遲載入功能,是全域性配置,預設值為false,要想在專案中啟用延遲載入功能,需要將這個屬性設定為true。
aggressiveLazyLoading
此屬性控制觸發延遲載入屬性的方式,是全域性配置,預設值為true,表示只要有一個延遲載入的屬性被使用,所有延遲載入的屬性都會載入;false表示按需要載入。
關於以上2個屬性的詳細說明請看MyBaits的官方文件:MyBatis - MyBatis 3 | Configuration - 呼叫查到物件的toString()方法觸發延遲載入的解決辦法
引起這個問題的根本原因是settings的lazyLoadTriggerMethods屬性,MyBaits對Object的部分方法做了特殊處理,預設情況下當呼叫到equals,clone,hashCode,toString這4個方法時會觸發延遲載入;可以通過在setting中增加<setting name="lazyLoadTriggerMethods" value=""/>來禁用這個特性。
解決以上2個問題的完整的setting配置如下:
<settings>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/>
<setting name="lazyLoadTriggerMethods" value=""/>
</settings>