码迷,mamicode.com
首页 > Web开发 > 详细

hibernate报错:no currentsessioncontext configured!

时间:2017-07-31 23:27:42      阅读:266      评论:0      收藏:0      [点我收藏+]

标签:ssi   多个   text   功能   驱动   jdb   不能   事务控制   csdn   

使用hibernate框架时候报错:no currentsessioncontext configured!

 

  这个错误是当我们使用getCurrentSession();时候引起的,原因是currentSession配置错误,与事务有关,当我们使用currentSession的时候需要在hibernate.cfg.xml中进行如下事务配置:

 

  1、如果是本地事务:

    <property name="hibernate.current_session_context_class">thread</property>

 

  2、如果是全局事务

    <property name="hibernate.current_session_context_class">jta</property>

这样配置一下就好了!

 

  当然,如果获得session 对象时不使用的是 sessionFactory.getCurrentSession(),而是使用 sessionFactory.openSession()就不会出现这个错误了。

 

  说一下getCurrentSession()和openSession()方法的区别:

 

    openSession()是不管任何情况都重新开启一个Session,而getCurrentSession();相对的增加了一个判断,在有Session的情况下就会直接去调用,没有session的话才会创建,如果有事务操作的话getCurrentSession();更好一些,很容易的使得一个线程只有一个session对象。

 

  本地事务和jta事务:

 

    本地事务:使用 JDBC 事务界定时,您可以将多个 SQL 语句结合到一个事务中。JDBC 事务的一个缺点是事务的范围局限于一个数据库连接。一个 JDBC 事务不能跨越多个数据库。

 

    jta事务:JTA是一种高层的,与实现无关的,与协议无关的API,应用程序和应用服务器可以使用JTA来访问事务。
  JTA允许应用程序执行分布式事务处理——在两个或多个网络计算机资源上访问并且更新数据,这些数据可以分布在多个数据库上。JDBC驱动程序的JTA支持极大地增强了数据访问能力。

 

    区别:JDBC事务控制的局限性在一个数据库连接内,但是其使用简单;JTA事务的功能强大,事务可以跨越多个数据库或多个DAO,使用较复杂。

hibernate报错:no currentsessioncontext configured!

标签:ssi   多个   text   功能   驱动   jdb   不能   事务控制   csdn   

原文地址:http://www.cnblogs.com/wangzhiming/p/7266244.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!