日期:2014-05-20  浏览次数:20658 次

找hibernate对session的一个管理方案
在自己的方法开头,总是打开一个session,在结尾就关闭,但解决不了延时加载时带来的一大串麻烦,比如说session已关闭,或是连接多起来的时候,直接把服务器给搞瘫痪了。来个朋友说下session的创建原理,再说个管理方案,我在论坛里看过,但还是觉得很抽象。我希望的是一用户一个session,这样不会消耗太多资源吧?顺便讲个延时加载的原理,究竟是在方法后去查数据库还是同时进行的?例如用户表有个字段是角色ID,配置的时候,角色表lazy="flase",在DAO层有一方法查所有用户的,我是知道,是这方法执行完了,再去加载角色表的对应信息还是同时进行的? 还有,查用户和查角色用的是同一个session吗?

------解决方案--------------------
连接多的时候把服务器搞瘫痪,这里我要问你,用连接池了吗?
如果使用Spring的话,session的创建和销毁不需要你代码处理,懒加载问题也可以用OpenSessionInView解决。但你Spring要会用啊,这一两句说不清楚
如果不用Spring,绝对不要每个方法都创建和销毁一次session。可以在表示层的方法中手动打开Session,放在ThreadLocal里,用它执行业务代码,离开方法前关掉。这样你的懒加载问题可以一定程度解决,但那些在写JSP页面时才初次懒加载的属性还是会失败,你可以在持久层给有可能需要懒加载属性的查询方法,多写一个重载,用一个boolean变量标识是否需要立刻初始化被懒加载的属性。