hibernate 一个事物中先更新一个对象 再查询所更新的对象 ?

hibernate 一个事物中先更新一个对象 在查询所更新的对象 ?

hibernate默认更新(update)SQL先放在hibernate的缓存中等事务commit的时候一起提交,不按代码的顺序来执行 ;

查询操作是实时刷新(flush)的 按代码的先后顺序  ,所以查询到的对象的数据是更新之前的数据 不符合业务逻辑


         通过查阅Hibernate的API可以知道flush方法的主要作用就是清理缓存,强制数据库与Hibernate缓存同步,以保证数据的一致性。它的主要动作就是向数据库发送一系列的sql语句,并执行这些sql语句,但是不会向数据库提交。而commit方法则会首先调用flush方法,然后提交事务。这就是为什么我们仅仅调用flush的时候记录并未插入到数据库中的原因,因为只有提交了事务,对数据库所做的更新才会被保存下来。因为commit方法隐式的调用了flush,所以一般我们都不会显示的调用flush方法。

        所以解决此问题是在更新(update)SQL 后执行session.flush()方法 把更新的SQL刷入数据库。


Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();

this.getHibernateTemplate().update(object);

session.flush();

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Hibernate: 一个持久化框架 一个ORM框架 加载:根据特定的OID,把一个对象从数据库加载到内存中OID...
    JHMichael阅读 2,009评论 0 27
  • 本文包括: 1、CRM 项目的整体介绍 2、Hibernate 框架概述 3、Hibernate 快速入门 4、H...
    廖少少阅读 3,485评论 9 66
  • 本文包括:1、Hibernate的持久化类2、Hibernate 持久化对象的三个状态(难点)3、Hibernat...
    廖少少阅读 1,495评论 0 13
  • 这部分主要是开源Java EE框架方面的内容,包括Hibernate、MyBatis、Spring、Spring ...
    杂货铺老板阅读 1,443评论 0 2
  • 真的门对门,"吃茶去“,一期一会的缘。 半推开门,瞧见对门一个瘦小精致的奶奶正拿着钥匙在开门,听到声音她转过身来,...
    和小雨阅读 413评论 0 0