Hibernate中解决No Hibernate Session bound to thread问题
引用:忘了
首先是getCurrentSession()与openSession()的区别:
1、getCurrentSession()与openSession()的区别?
* 采用getCurrentSession()创建的session会绑定到当前线程中,而采用openSession()创建的session则不会
* 采用getCurrentSession()创建的session在commit或rollback时会自动关闭,而采用openSession()创建的session必须手动关闭
2、使用getCurrentSession()需要在hibernate.cfg.xml文件中加入如下配置:
* 如果使用的是本地事务(jdbc事务)
<property name="hibernate.current_session_context_class">thread</property>
* 如果使用的是全局事务(jta事务)
<property name="hibernate.current_session_context_class">jta</property>
openSession() 与 getCurrentSession() 有何不同和关联呢?
在
SessionFactory 启动的时候, Hibernate 会根据配置创建相应的 CurrentSessionContext ,在
getCurrentSession() 被调用的时候,实际被执行的方法是CurrentSessionContext.currentSession() 。在 currentSession() 执行时,如果当前
Session 为空, currentSession
会调用 SessionFactory 的 openSession 。所以 getCurrentSession() 对于 Java EE 来说是更好的获取 Session 的方法。
那么当使用getCurrentSession()方法时报No Hibernate Session bound to thread问题该怎么办呢?(引用自http://www.cnblogs.com/ylhssn/p/5181149.html)
1、getCurrentSession()是必须提交事务的。所以在用到session.getCurrentSession()的这个方法一定是要配置声明式事务管理。
2、openSession()恰恰是与以上的方法想法,它不需要提交事务。但是他的资源必须手动关闭。
所以针对“No Hibernate Session bound to thread”异常的解决方案有两个:
方案一:将getCurrentSession()改为openSession()。
方案二:在sessionFactory bean中的hibernateProperties项中配置以下信息:
1 <prop key="hibernate.current_session_context_class">
2 thread
3 </prop>
4 <prop key="hibernate.transaction.factory_class">
5 org.hibernate.transaction.JDBCTransactionFactory
6 </prop>
在sessionFactory bean中添加以上两条配置信息后,再次运行程序,又报异常!
org.hibernate.HibernateException: createCriteria is not valid without active transaction
已知使用getCurrentSession()方法是必须提交事务的,而在SSH框架中是使用spring配置声明式事务管理的。
那接下来再次复习一下spring配置声明式事务管理知识,以便查找错误。
spring配置声明式事务管理
此处知识回顾引自“一个无聊的人”的“Spring声明式事务配置管理方法”,博主讲的很详细,推荐一看, 传送门
以下是博文内容截图:


除此之外还可以使用其他几种方式用spring管理事务,请自行查找资料学习。
仔细核对项目中的配置信息后,确定事务已配置无误,当前异常信息还是未解决,继续找资料,最终在“如果你报createSQLQuery is not valid without active transaction,请看这里”一文中找到解决方式:
将hibernate.current_session_context_class的值由Thread改为org.springframework.orm.hibernate2.SpringSessionContext

至此由使用getCurrentSession()方法引发的异常问题解决!
Hibernate中解决No Hibernate Session bound to thread问题的更多相关文章
- HibernateException: No Hibernate Session bound to thread
解决No Hibernate Session bound to thread 背景交代 在使用this.getHibernateTemplate().getSessionFactory().getCu ...
- spring事务管理出错。No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy ...
- No Hibernate Session bound to thread, and configuration does not allow creat
No Hibernate Session bound to thread, and configuration does not allow creat 今天遇到这么一个错误,在网上差了很多都没有能解 ...
- spring 管理事务配置时,结果 报错: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here这个异常
java.lang.IllegalStateException: No Hibernate Session bound to thread, and configuration does not al ...
- org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not a ...
- Hibernate Could not obtain transaction-synchronized Session for current thread问题处理
项目通过Hibernate查询时报出如下错误: Hibernate Could not obtain transaction-synchronized Session for current thre ...
- Hibernate中两种获取Session的方式
转自:https://www.jb51.net/article/130309.htm Session:是应用程序与数据库之间的一个会话,是hibernate运作的中心,持久层操作的基础.对象的生命周期 ...
- 关于Hibernate Could not obtain transaction-synchronized Session for current thread
转载自 http://blog.csdn.net/flyjiangs/article/details/51537381 最近几年一直再搞android,最近闲下来了,顺便玩一下web. 整了个最新版本 ...
- 解决No Hibernate Session bound to thread, and configuration does not allow creat。。。
applicationContext.xml配置 <?xml version="1.0" encoding="UTF-8"?> <beans ...
随机推荐
- PAT_A1122#Hamiltonian Cycle
Source: PAT A1122 Hamiltonian Cycle (25 分) Description: The "Hamilton cycle problem" is to ...
- Lua循环结构while循环、repeat 循环、for循环_学习笔记03
Lua循环结构while循环.repeat 循环.for循环 while语法结构 while 循环条件 do 循环体 end --1.输出1到100 index = do print(index) ...
- Lua的五种变量类型、局部变量、全局变量、lua运算符、流程控制if语句_学习笔记02
Lua的五种变量类型.局部变量.全局变量 .lua运算符 .流程控制if语句 Lua代码的注释方式: --当行注释 --[[ 多行注释 ]]-- Lua的5种变量类型: 1.null 表示 ...
- xdebug PHPStrom调试 安装
1.publi目录下新建info文件: 2.搜索是否已经安装过xdebug 3.下载安装 >[info] 自动查找相对应的版本 == 打开php.ini 原始: [XDebug]xdebug.p ...
- mysql中的高级查询语句
此随笔用到的数据全是来自 关于mysql中表关系的一些理解(一对一,一对多,多对多) 提及的 学院表,学生表,学生详情表,选课表,课程表 单标查询:(查看学生表的学生名单) select st ...
- display显示属性理解
display属性设置一个元素应如何显示,是我们在前端开发中常常使用的一个属性,其中,最常见的有: 目录 display:none;表示此元素将不被显示. display:block;将元素显示为块元 ...
- 洛谷 P2712 摄像头
题目描述 食品店里有n个摄像头,这种摄像头很笨拙,只能拍摄到固定位置.现有一群胆大妄为的松鼠想要抢劫食品店,为了不让摄像头拍下他们犯罪的证据,他们抢劫前的第一件事就是砸毁这些摄像头. 为了便于砸毁摄像 ...
- [MySQL]--查询性能分析工具-explain关键字
explain显示了MySQL如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句. explain的使用方法很简单,只需要在select查询语句前面加上expl ...
- JAVA集合泛型,类型擦除,类型通配符上限之类的知识点
感觉定义要比PYTHON严谨很多,一切源于静态语言的特点吧.. 于是语法上就复杂很多,值不值得呢? 参考测试URL: http://www.cnblogs.com/lwbqqyumidi/p/3837 ...
- Java中的事务
Java中的事务 学习了:https://www.cnblogs.com/chengpeng15/p/5802930.html 膜拜一下 org 分为三类:jdbc事务.jta事务.容器事务: