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