1. 程式人生 > >MyBaits延遲載入失效解決之道

MyBaits延遲載入失效解決之道

遇到現象

  1. 延遲載入不起作用
  2. 呼叫查到物件的toString()方法觸發延遲載入

解決辦法

  1. 延遲載入不起作用的解決辦法
    在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

  2. 呼叫查到物件的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>