createSQLQuery is not valid without active transaction解决方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了createSQLQuery is not valid without active transaction解决方法相关的知识,希望对你有一定的参考价值。
错误出现场景:
hibernate+struts2整合时,hibernate+struts2+spring(SSH)框架整合时出现
解决方案:
在我们使用hibernate框架与其他框架进行整合时,会遇到“不能在没有活动的事务中执行(org.hibernate.HibernateException: createSQLQuery is not valid without active transaction)”,我曾反复查看过自己写的代码,甚至把项目删除重新写一遍,仍然发现此问题的存在,我开始怀疑是hibernate核心配置文件的问题,立即将本地线程绑定session给注释了(hibernate.current_session_context_class),结果再启动项目,发现问题解决了
问题分析:
hibernate.current_session_context_class的值设成thread。我的理解就是将getCurrentSession()返回的session绑定到当前运行线程中。比较专业的说法是此session的上下文是thread,但不是spring已经托管的那个Session对象。所以获取的session是在spring代理的上下文之外的的当前线程之中,所以此session并非事务管理器代理的那个session,不会自动开启事务。根据官方提示:第三方框架提供了基于代理或者基于拦截器的上下文相关的会话的管理。
个人小站:http://www.xinxbk.cn
个人扣扣:4710287
欢迎与您一起交流Java开发!
以上是关于createSQLQuery is not valid without active transaction解决方法的主要内容,如果未能解决你的问题,请参考以下文章
babel-loader 错误 - TypeError: val is not a function
Required String parameter ' ' is not present
DEDE后台添加新变量出现:Request var not allow!的解决办法 相关案例演
org.hibernate.exception.SQLGrammarException: could not execute query