使用hibernate的getCurrentSession()执行查询语句时,为什么一定要开启事务? 谢谢!

java2670655722 2012-09-19 01:14:47
我们知道在“增删改查”操作里,只有查询是不需要开启事务的,但是使用hibernate的getCurrentSession()执行查询语句时却一定要开启事务,否则就报错,请问这是为什么呢?


Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Teacher t = (Teacher)session.get(Teacher.class, 1);
session.getTransaction().commit();


我测试发现,如果使用OpenSession()是不需要开启事务的

Session session = HibernateUtil.getSessionFactory().openSession();
Teacher t2 = (Teacher)session.get(Teacher.class, 1);
session.close();


使用OpenSession()执行查询不需要开启事务,这点跟事务的本质符合。
但使用getCurrentSession()执行查询却要开启事务,请高手帮我解答,谢谢!
...全文
1099 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
cui_2000 2012-09-22
  • 打赏
  • 举报
回复
查询也要事务吗??应该不要吧,还是我记错了??增删改才要开事务吧...
未来纪元 2012-09-22
  • 打赏
  • 举报
回复
是否openSession是默认自动提交事务,而getCurrentSession默认不自动提交事务
s478853630 2012-09-22
  • 打赏
  • 举报
回复
查询数据可以没有事务,增删改是一定要的
yuanfei213 2012-09-21
  • 打赏
  • 举报
回复
因为getCurrentSession()本意就是获取当前事务中的session,如果没有事务,你从哪里获取session
walkman_22 2012-09-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
主要是线程安全
[/Quote]
http://aubergine-kang.iteye.com/blog/1306054

这篇文章讲的有参考价值。
zhenlai2012 2012-09-19
  • 打赏
  • 举报
回复
主要是线程安全

67,543

社区成员

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

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