在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