博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
getSession getHibernateTemplate用哪个
阅读量:4106 次
发布时间:2019-05-25

本文共 1408 字,大约阅读时间需要 4 分钟。

在 Spring+Hibernate的集成环境里,如果DAO直接使用HibernateDaoSupport的getSession()方法获取 session进行数据操作而没有显式地关闭该session,那么程序表现为:每个session会打开一个connection,并且 connection会一直保持(因为没有显式地close).如果程序使用了c3p0连接池,则因为c3p0连接池默认最大连接数是15,程序会表现为当打开第15个连接时,程序处于停滞状态,等待从连接池获取新的连接.
  在同样条件下,使用HibernateTemplate进行数据操作,就没有连接数持续增长的情况,程序结束时连接数归零.这印证了spring文档上所说:HibernateTemplate会对session进行了管理,能够确保Session实例的正确打开和关闭.
  需要注意的是:在Spring环境里,即使我们使用Hibernate原生的API,比如这里所说的使用HibernateDaoSupport的getSession()方法得到Session进行数据操作(而不是使用Spring自己提供的API,比如HibernateTemplate),这些操作也依然会被纳入spring管理的事务中去.原因是通过getSession()方法得到Session是一个绑定到当前事务上的session.此处可参考:.这就是为什么Spring文档中提到的:You can implement DAOs based on the plain Hibernate API, while still being able to participate in Spring-managed transactions.
     如果程序使用了OpenSessionInViewFilter或者OpenSessionInViewInterceptor那将是另外一种情形了.
  简单总结: HibernateDaoSupport的getSession()得到的Session会参与Spring管理的事务中,但是不能自动的关闭. HibernateTemplate 除能参与到 Spring管理的事务中,还 能够确保Session实例的正确打开和关闭.
 
在myeclipse10.6中使用生成springDAO时,如果是
hibernate4会直接生成
getCurrentSession().save(transientInstance)因为,
hibernate4之后spring就没提供hibernateTemplate了;没有使用事务啊,没有关闭Session的操作。生成继承于BaseHibernateDAO的DAO是getSession().save(transientInstance);基本上没什么区别啊。
spring in action中说既然有了session就不需要再使用

HibernateTemplate ,直接使用getsession()就好,可是为什么在网上查的都是用HibernateTemplate 比较好呢。

群里询问,是说有HibernateTemplate 的封装当然好一些。但是现在都没用hibernate了  在用springdatajpa 写个方法名就搞定了  hql sql 都没有  也没有什么getsession

转载地址:http://jdnsi.baihongyu.com/

你可能感兴趣的文章
EasyApn: Remove Password from PEM file
查看>>
QSetting 读写配置文件
查看>>
Sqlite实现默认时间为当前时间列的方法
查看>>
Linux下Qt程序的调试方法
查看>>
Linux操作系统里查看所有用户
查看>>
CentOS6.4安装Qt5.0.1
查看>>
CentOS 6.4 上找不到qmake的解决办法
查看>>
Qt关闭程序简单分析
查看>>
QT程序安装包制作 在Windows下发布程序的方法
查看>>
UDID替代方案
查看>>
iOS开发中混合使用ARC和非ARC项目
查看>>
IOS 如何让你的应用快速兼容iPhone5
查看>>
iphone5适配
查看>>
让XCode的 Stack Trace信息可读
查看>>
解决华为云CentOS 7 SSH 远程连接不上的问题
查看>>
zip命令压缩时排除隐藏文件和隐藏目录及指定目录
查看>>
安装完Fedora 18后需要做的事情
查看>>
解决 Subversion 的 “svn: Can't convert string from 'UTF-8' to native encoding” 错误
查看>>
Maven手动上传第三方jar包的命令
查看>>
libmemcached编译 出错
查看>>