Hibernate问题 failed to lazily initialize a collection of role

failed to lazily initialize a collection of role问题
原因:
事务配置在Service上,(一对多,多对一,多对多)映射的类是被代理的默认加载是Lazy = true所以没有加载事务且,当主类执行完事务关闭,就没有了session

解决办法:
方法1. @Lazy(value=false)
缺点:大量数据时,速度慢容易崩溃
   
   
@OneToMany(mappedBy="survey")
@Lazy(value=false)
public Set<Page> getPages() {
return pages;
}

方法2. web.xml添加上openSessionInViewFilter过滤器(必须在struts2前)
    优点:渲染视图时打开session,一劳永逸解决懒加载问题,
    缺点:大数据,高并发容易崩溃,性能下降
   
   
<!-- 解决failed to lazily initialize a collection of role问题 -->
<filter>
<filter-name>openSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
<init-param>
<param-name>singleSession</param-name>
<param-value>false</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>openSessionInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
方法3:强行在service层面初始化代理对象,所以不会延迟加载(推荐)
   
   
public Survey getSurveyWithChildren(Integer sid){
//Survey s = surveyDao.getEntity(sid);
//降低耦合度
Survey s = this.getSurvey(sid);
//强行初始化pages和questions集合
for(Page p : s.getPages()){
p.getQuestions().size();
}
return s;
}
高内聚,低耦合:同一组件内部,提高复用率,组件之间,降低连接
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值