日期:2014-05-17  浏览次数:20699 次

在HTTPsession中存放对象的问题
比如有用户User和新闻News两个实体,News与User多对已关系

当用户登录的时候将User对象放入HTTPSession中,

在某个页面中,从HTTPSession中获取User的对象,之后我想获得这个用户发布的新闻,

用Set news = user.getNews();这样会提示no session or session closed

(注:我使用了Hibernate的懒加载,配置了OpenSessionInViewFilter)

我猜想是在用户登录将User放入HTTPSession中后,页面渲染完毕,OpenSessionInViewFilter关闭session,这样这个放入HTTPSession中的User就变成了游离态。

在新的页面中从HTTPSession中获得User后,由于其session已经关闭,所以不能再加载News。


不知道我上面的理解是否正确,还是有别的原因,请大家不吝赐教啊!

如果真的是这样的话,如果我想直接用这个User得到News该怎么做呢?

===============================================================================================
以上是咱搜到的10年的问题,咱有同样的疑惑,但那贴里没人解答

然后咱还有一个相关的问题

处理登陆的时候,通常会把User的信息放入HttpSession中

那么是只存放user id呢,还是像上面一个问题一样存放整个对象?

如果我只放id,那么每次需要读取User信息时,都还要重新通过Hibernate访问数据库,是否效率不高?

如果我放这个实体对象,是否对于服务器内存太过浪费了?

各位高手帮忙解答下吧,谢谢啊!




------解决方案--------------------
直接放一个USER对象,消耗内存比消耗数据库时间划得来
------解决方案--------------------
现在机器内存一般来说都比较大,将整个对象存在httpsession中也不会浪费多少内存。写程序是要注意内存的使用,但我觉得没必要在一个对象上纠结,建议httpsession中存整个对象,使用方便。
至于Set news = user.getNews();这个问题,具体原理不敢说,但是感觉不靠谱,还是用从httpsession中拿出来的user再重新查询一次吧。