求教贴,关于SSH框架内的session获取

royaki 2010-02-13 12:27:12
SSH中,有三种方式获得session进行持久话:
this.getHibernateTemplate()
this.getSession()
this.getSessionFactory().getCurrentSession()

他们有什么区别呢?


搜索了很多文章,看得都不是大明白。
谁能详细讲一下他们是怎么一个关系,还有hibernate.cfg.xml中配置的那个
<property name="current_session_context_class">thread</property>
作用跟上面有什么联系么?

谢谢啦!
...全文
170 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cgcavalier518 2010-02-22
  • 打赏
  • 举报
回复
找到了问题还贴出来,LZ很棒!
royaki 2010-02-16
  • 打赏
  • 举报
回复
我搜集了一下资料,有了解答。发出来给大家共享~

getSession获得的默认从当前事务获得session,没有则新建一个并且绑定到当前事务,它不会自动关闭。
但是如果配置了spring的事务管理,spring会在事务结束后执行releaseSessin(Session session)操作。就是说只要使用了spring的事务管理,就可以放心的使用getSession()
getHibernateTemplate()是对getSession()的进一步封装,如果使用spring进行事务管理,两种方案都可以选择,如果不是用spring的事务管理,使用getSession()就需要手动关闭连接了。
getCurrentSession的使用要配置hibernate的配置文件:hibernate.securrent_session_context_class=thread,这样才会从当前线程里拿session,否则默认的是从jta上下文拿session
licip 2010-02-13
  • 打赏
  • 举报
回复
你很多的操作都要用this.getHibernateTemplate()
这种形式。再加spring的配置,那session的开与关都由spring来完成的。不要单独获取出来呀。
J_CodeLiving 2010-02-13
  • 打赏
  • 举报
回复
帮顶
...........

fpy_061625 2010-02-13
  • 打赏
  • 举报
回复
配置为:<property name="current_session_context_class">thread </property>
是为了
通过this.getSessionFactory().getCurrentSession() 拿到的Session是会自动绑定到当前线程。
fpy_061625 2010-02-13
  • 打赏
  • 举报
回复
this.getSessionFactory().getCurrentSession() 是需要我们每次都创建一个新的SessionFactory,而SessionFactory却是一个重量级的对象,所以每次创建会影响性能,所以我们通常把SessionFactory作为单例,从而我们只需要this.getSession()便可,this.getHibernateTemplate() 是Spring对Hibernate中Session的一个包装模板(其实以上三种方式【带this关键字的】都是spring对hibernate的包装),使得我们可以做在该包装下的特定操作,该包装很好很强大,大家使用率很高。

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧