Hibernate解決懶加載問題

1、問題:在一對多關係中,需要加載多的一方的數據

三種解決辦法:

第一種:在service層查詢多的一方(推薦使用-à在某一個業務需要使用到時才加載

 

第二種:在多的一方的實體類上加fetch=FetchType.EAGER---------效率最高(在某幾個業務都需要使用多的一方的實體類時,推薦使用)

 

         @OneToMany(fetch=FetchType.EAGER)

         @JoinColumn(name= "C_TRANSIT_INFO_ID")

         @OrderColumn(name= "C_IN_OUT_INDEX")

         privateList<InOutStorageInfo> inOutStorageInfos = newArrayList<InOutStorageInfo>();

 

第三種:在web.xml中配置Filter過濾器:openEntityManagerInView  ---------------效率最低

<filter>

                   <filter-name>OpenEntityManagerInView</filter-name>

                   <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>

         </filter>

        

         <filter-mapping>

                   <filter-name>OpenEntityManagerInView</filter-name>

                   <url-pattern>/*</url-pattern>

         </filter-mapping>

2、解決懶加載問題:在一對多關係中,不需要加載多的一方的數據

兩種解決辦法:

1、  在web.xml文件中添加如下標籤:

<!-- 解決spring data jpa事務懶加載 -->

<filter>

    <filter-name>openEntityManagerInViewFilter</filter-name>

<filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>

</filter>

<filter-mapping>

    <filter-name>openEntityManagerInViewFilter</filter-name>

    <url-pattern>/*</url-pattern>

</filter-mapping>

 

 

2、 在實體類(get方法上)添加如下註解:

@JSON(serialize = false)

public Set<WorkBill> getWorkBills() {

    return workBills;

}

 

public void setWorkBills(Set<WorkBill> workBills) {

    this.workBills = workBills;

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章