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;
}