Hibernate问题 failed to lazily initialize a collection of role
2017-07-23 00:03
615 查看
failed to lazily initialize a collection of role问题
原因:
事务配置在Service上,(一对多,多对一,多对多)映射的类是被代理的默认加载是Lazy = true所以没有加载事务且,当主类执行完事务关闭,就没有了session
解决办法:
方法1. @Lazy(value=false)
缺点:大量数据时,速度慢容易崩溃
方法2. web.xml添加上openSessionInViewFilter过滤器(必须在struts2前)
优点:渲染视图时打开session,一劳永逸解决懒加载问题,
缺点:大数据,高并发容易崩溃,性能下降
方法3:强行在service层面初始化代理对象,所以不会延迟加载(推荐)
高内聚,低耦合:同一组件内部,提高复用率,组件之间,降低连接
原因:
事务配置在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;
}
高内聚,低耦合:同一组件内部,提高复用率,组件之间,降低连接
相关文章推荐
- hibernate懒加载的问题,failed to lazily initialize a collection of role
- failed to lazily initialize a collection of role: no session or session was closed (Hibernate) 解决方法(延迟加载问题)
- 【转】hibernate懒加载的问题,failed to lazily initialize a collection of role
- failed to lazily initialize a collection of role(hibernate一对多或者多对多懒加载问题)
- org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.jav
- fastjson序列化hibernate查询的数据报错:failed to lazily initialize a collection of role
- hibernate一对多取到的set集合 failed to lazily initialize a collection of role
- hibernate 延迟加载的错误 failed to lazily initialize a collection of role
- failed to lazily initialize a collection of role问题
- org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role:XXX
- 由merge引发的failed to lazily initialize a collection of role问题(本质是对象状态问题)
- Hibernate多对多、一对多查询出现failed to lazily initialize a collection of role
- org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role
- hibernate 延迟加载的错误 failed to lazily initialize a collection of role
- 解决: failed to lazily initialize a collection of role: no session or session was closed问题
- SSH报错之 hibernate.LazyInitializationException: failed to lazily initialize a collection of role: XXXX
- Hibernate加载数据失败failed to lazily initialize a collection of role
- org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role
- Hibernate 延迟加载的错误 failed to lazily initialize a collection of role [Hibernate]
- hibernate 延迟加载的错误 failed to lazily initialize a collection of role