第一種原因: no Session 錯誤 dao層中get方法換成了load方法,或者其他原因引起. 原因分析: 真正用到代理對象的時候,代理對象沒有值,並且session的生命周期已經走完了. 解決方案:1,load()換成get(),或者立即查詢,比如列印一下. 2,延長session的存活時間 ...
第一種原因:
no Session 錯誤
dao層中get方法換成了load方法,或者其他原因引起.
原因分析: 真正用到代理對象的時候,代理對象沒有值,並且session的生命周期已經走完了.
解決方案:1,load()換成get(),或者立即查詢,比如列印一下.
2,延長session的存活時間,---- OpenSessionInViewFilter
web.xml中配置:
<!-- 延長session存活時間 -->
<filter>
<filter-name>OpenSession</filter-name>
<filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>OpenSession</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
第二種原因:
NoSession
初始化快遞員對象中 定區集合
web層轉Courier對象為json串時候,對象中有fixedareas集合屬性,jpa載入策略延遲載入。
在action中轉fixedareas集合為json串,通過代理對象查詢資料庫,action中session已經關閉。
解決方案:不轉fixedareas集合。
/**
* @Description: 快遞員分頁
* @return
* @throws Exception
*
*/
@Action("courierAction_pageQuery")
public String pageQuery() throws Exception {
Pageable pageable = new PageRequest(page-1, rows);
Page<Courier> page = courierService.findAll(pageable);
Map<String, Object> map = new HashMap<>();
map.put("total", page.getTotalElements());
map.put("rows", page.getContent());
//將fixedares集合屬性排除掉,不轉json
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setExcludes(new String[]{"fixedAreas"});
String json = JSONObject.fromObject(map, jsonConfig).toString();
ServletActionContext.getResponse().setContentType("text/json;charset=utf-8");
ServletActionContext.getResponse().getWriter().write(json);
return NONE;
}