atitit.spring hibernate的事务机制 spring不能保存对象的解决

sessionFactory.openSession()

不能。。log黑头马sql语言..

sessionFactory.getCurrentSession().update(user);

中间走ok兰..log黑头也有累..

在Spring中使用Hibernate,如果我们配置了TransactionManager,那么我们就不应该调用SessionFactory的openSession()来获得Sessioin,因为这样获得的Session并没有被事务管理。

作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://blog.csdn.net/attilax

采用getCurrentSession()创建的session会绑定到当前线程中,而采用openSession()创建的session则不会。

采用getCurrentSession()创建的session在commit或rollback时会自动关闭,而采用openSession()创建的session必须手动关闭。

使用getCurrentSession()需要在hibernate.cfg.xml文件中加入如下配置:

* 如果使用的是本地事务(jdbc事务)

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

* 如果使用的是全局事务(jta事务)

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

如果采用的时Hibernate4,使用getCurrentSession()必须配置事务,否则无法取到session

3 hibernateTemplate.getSessionFactory().getCurrentSession()

我们使用spring和hibernate结合,操作数据库最常用可能是HibernateTemplate,HibernateTemplate中集成了很多使用的方法,可惜的是没的createQuery方法,也许我们使用hibernate的时候喜欢使用Query,我们可能会封装hibernateTemplate.getSessionFactory().getCurrentSession()方法得到Session,session创建Query,这是一个方法,但你应该会得到异常 “createQuery without an active transaction”,因为使用hibernateTemplate.getSessionFactory().getCurrentSession(),你是使用的hibernate的事务管理,而你指望spring管理的事务是hibernateTemplate,所以你会提示没有打开事务的异常,解决方法:1)使用hibernate事务处理,就像上面单独使用hibernate一样,但这也许不是你想要的。2)使用hibernateTemplate的HibernateCallBack回调:

使用Hibernate的大多数应用程序需要某种形式的“上下文相关的” session,特定的session在整个特定的上下文范围内始终有效。然而,对不同类型的应用程序而言,要为什么是组成这种“上下文”下一个定义通常 是困难的;不同的上下文对“当前”这个概念定义了不同的范围。在3.0版本之前,使用Hibernate的程序要么采用自行编写的基于 ThreadLocal的上下文session,要么采用HibernateUtil这样的辅助类,要么采用第三方框架(比如Spring或Pico), 它们提供了基于代理(proxy)或者基于拦截器(interception)的上下文相关session。

从3.0.1版本开 始,Hibernate增加了SessionFactory.getCurrentSession()方法。一开始,它假定了采用JTA事务,JTA事务 定义了当前session的范围和上下文(scope and context)。Hibernate开发团队坚信,因为有好几个独立的JTA TransactionManager实现稳定可用,不论是否被部署到一个J2EE容器中,大多数(假若不是所有的)应用程序都应该采用JTA事务管理。 基于这一点,采用JTA的上下文相关session可以满足你一切需要。

更好的是,从3.1开 始,SessionFactory.getCurrentSession()的后台实现是可拔插的。因此,我们引入了新的扩展接口 (org.hibernate.context.CurrentSessionContext)和新的配置参数 (hibernate.current_session_context_class),以便对什么是“当前session”的范围和上下文(scope and context)的定义进行拔插。

Hibernate4 No Session found for current thread原因 - 一号门-程序员的工作,程序员的生活(java,python,delphi实战).htm

Spring整合hibernate4:事务管理.htm

getCurrentSession 与 openSession() 的区别 - LoveYouT的专栏 - 博客频道 - CSDN.NET.htm

atitit.spring hibernate的事务机制 spring不能保存对象的解决相关推荐

  1. Spring MVC+Spring +Hibernate配置事务,但是事务不起作用

    最近做项目,被一个问题烦恼了很久.使用Spring MVC+Spring +Hibernate开发项目,在使用注解配置事务管理,刚开始发现无论如何数据库都无法更新,但是可以从数据库查询到数据.怀疑是配 ...

  2. spring + hibernate + mysql 事务不回滚

    首先声明,这个问题涉及到的数据库是MySQL.这是个很奇怪的问题,事务怎么会不回滚呢?实际上这是个愚蠢的问题,是经验不足导致的,越是奇怪的问题解决起来就越容易.不回滚的根本原因不在Hibernate, ...

  3. SSH(Struts,Spring,Hibernate )和SSM(SpringMVC,Spring,MyBatis )的区别,抽丝剥茧的给你讲清楚

    SSH 通常指的是 Struts2 做前端控制器,Spring 管理各层的组件,Hibernate 负责持久化层. SSM 则指的是 SpringMVC 做前端控制器,Spring 管理各层的组件,M ...

  4. spring同类调用事务不生效-原因及三种解决方式

    spring提供的声明式事务注解@Transactional,极大的方便了开发者管理事务,无需手动编写开启.提交.回滚事务的代码. 但是也带来了一些隐患,如果注解使用不当,可能导致事务不生效,最终导致 ...

  5. mysql交给spring管理_Mysql事务结合spring管理

    spring事务相关问题记录 遇到情况: 在本地单体应用调试代码时,发现在一个加了@transaction注解的方法里进行先更新后查询的操作,查询的结果是可以看到更新的内容的.而在微服务环境中同样的代 ...

  6. spring启动加载机制spring.factories使用方法

    步骤1:在resources/META-INF目录下创建名为spring.factories的文件 步骤2:内容以key=value的方式配置需要加载的类型,如下: key为接口类,可以使用sprin ...

  7. spring security原理和机制 | Spring Boot 35

  8. Hibernate的事务级别控制与查询对象的API(Query查询与Criterial查询+离线查询)

    1.事务级别控制 可以在Hibernate的配置文件中对事务进行配置.配置文件中,可以设置事务的隔离级别.其具体的配置方法是在hibernate.cfg.xml文件中的<session-fact ...

  9. Spring入门5.事务管理机制

    Spring入门5.事务管理机制 20131126 代码下载 : 链接: http://pan.baidu.com/s/1kYc6c 密码: 233t 回顾之前的知识,Spring 最为核心的两个部分 ...

最新文章

  1. linux内核调优参考
  2. PPLcnet和YOLO的碰撞,真的能在cpu上快到起飞?
  3. linux POSIX 信号集,读书笔记:第10章 Posix信号量 (6)
  4. java 注册回调_java 实现回调代码实例
  5. LINUX ORACLE 启动与关闭
  6. js粘贴板为什么获取不到图片信息_JavaScript 学习笔记(3):图片库
  7. 1209.1——快速排序算法
  8. 【渝粤教育】国家开放大学2018年春季 0014-22T秘书学(一) 参考试题
  9. python输入日期时间转换格式_python如何格式化日期?
  10. 首页终于让百度放出来了
  11. 关闭Windows Defender保护
  12. 蔚来es6_国产Model Y订单挤爆官网,蔚来ES 6惨遭大量退订?
  13. java定时发送_Java 定时发送邮件 | 学步园
  14. 工业机器人市场2018年热点回顾与2019年展望
  15. 传播小知识:timeout限制时间命令
  16. android吸顶效果,RecyclerVIew实现悬浮吸顶效果
  17. OA流程归档后,没有推送消息通知这样处理
  18. S700K道岔故障诊断数据txt及故障诊断算法
  19. 移动APP登录注册(vue+vant)
  20. 笔记本修改无线网卡MAC地址

热门文章

  1. 343. 整数拆分 golang 动态规划
  2. 172. 阶乘后的零 golang
  3. Linux系统【四】进程间通信-管道
  4. 信号量释放和等待函数sem_post()和sem_wait()
  5. 【汇编语言】记录一组数中负数的个数,8086与MIPS汇编程序
  6. 服务器之select
  7. 145. 二叉树的后序遍历
  8. 实验3 | 由遍历序列构造二叉树
  9. 企业级项目实战讲解!java的war包能直接改名么
  10. 大厂面试必问!如何写出高效率的SQL