显示来自相关实体的数据,以避免设置@BatchSize时出现延迟初始化异常

时间:2014-11-24 13:19:15

标签: spring hibernate jpa spring-data querydsl

我有像这样的实体

@Entity
@Table(...)
public class ENTITY_1 {

    //....
    private ENTITY_2 entity_2 ;
    private ENTITY_3 entity_3 ;
    private Set<ENTITY_3> entities_3 = new HashSet<ENTITY_3>(0); ;
    private ENTITY_4 entities_4 = new HashSet<ENTITY_4>(0); ;
    //...

我希望在我的jsp中显示查询结果,所以我使用fetch发出请求以获取所有相关实体以避免延迟初始化异常left join fetch

我的请求基于我的ENTITY_1(select .. from ENTITY_1

但我使用分页每页只有10个结果,因此提取会减慢我的请求所以我使用了@BatchSize(size=10)

我的问题是如何在我的jsp中显示相关实体的所有数据,因为我得到了延迟初始化异常。

我的jsp就像:

   ${entity_1_model.discription}
   //...
                <c:forEach var="entity_4" items="${entity_1_model.entities_4}">
                    <span class="">${entity_4.name}</span>
                </c:forEach> 

1 个答案:

答案 0 :(得分:1)

最快最简单的解决方案是在执行主查询后获取数据。试试这样的事情

page.content = query.offset(pageNumber*pageSize).limit(pageSize).list(ao);

for (Content cont : page.content) {
    Hibernate.initialize(cont.getEntities_4());
}