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

hibernate 中session问题
java web 开发 使用Hibernate + Spring + struts2 框架 

三层模式:dao,service,action。我现在的疑问是:在action层不能获得懒加载对象对应的属性和方法了。但是在dao层或service层可以获得。问同事说是因为在action层没session了。可是我还是不明白,session怎么理解。为何到action层就没有了,有知道的大神给小弟解释下,不胜感激!

------解决方案--------------------
懒加载的数据,是在你用它的时候才去从数据库读,
而spring transactionmanage是在service层的来进行事务管理的。
现在数据已经到了你action那边,
你的hibernate的session都已经关闭了,你再去懒加载,你当然读取不到数据了。
------解决方案--------------------
懒加载是数据访问层的事情,Action属于控制层,不负责数据库的相关操作,而且Session是hibernate的SessionFactory得到的对象,Session一般是属于事务范围的,负责对象持久化的操作,跟Action扯不上一点边。。
------解决方案--------------------
Session可以在action访问,如果你不在其他层次关闭它的话,
------解决方案--------------------
如果你的transaction开着的话就可以使用。但是不是很好的practice。为什么要在把session放在action里面。
------解决方案--------------------
在action中不需要使用action,直接调用方法就可以了。