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;

}

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