HTTP Status 500 - Could not write content: failed to lazily initialize a collection of role

来源:互联网 发布:linux execl 返回值 编辑:程序博客网 时间:2024/05/19 02:39

在spring mvc中创建多对多映射类时,对应两张表分别为app和app_list,

类App, 需要添加集合:

private Set<App> mapApps = new HashSet<App>();

类AppList,需要添加集合:

@ManyToMany(mappedBy="mapApps")  private Set<AppList> app_lists = new HashSet<AppList>();

在查询的时候,返回结果到页面时,出现标题所示错误。
原因是:
关联关系中采用fetch=FetchType.LAZY,返回给view层(jsp代码)的时候,由于加载领域对象的JPA Session已经关闭,导致这些延迟加载的数据访问异常。

解决办法是,在web.xml中添加OpenEntityManagerInViewFilter过滤器。

JPA:

<filter>    <filter-name>OpenSessionInViewFilter</filter-name>    <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class></filter><filter-mapping>    <filter-name>OpenSessionInViewFilter</filter-name>    <url-pattern>/*</url-pattern></filter-mapping>

Hibernate:

<filter>    <filter-name>OpenSessionInViewFilter</filter-name>    <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class></filter><filter-mapping>    <filter-name>OpenSessionInViewFilter</filter-name>    <url-pattern>/*</url-pattern></filter-mapping>

参考:
Spring的OpenEntityManagerInViewFilter http://whoosh.iteye.com/blog/1300721

1 0
原创粉丝点击