[hibernate]commit() 和flush() 的区别

本文深入探讨了Hibernate框架中的flush()与commit()方法的区别,解释了它们在事务管理和缓存同步中的作用。flush()用于将缓存中的数据同步到数据库,而commit()则提交事务,确保数据的持久化。
摘要由CSDN通过智能技术生成

flush()方法进行清理缓存的操作,执行一系列的SQL语句,但不会提交事务;commit()方法会先调用flush()方法,然后提交事务. 提交事务意味着对数据库所做的更新会永久保持下来
所谓清理,是指Hibernate 按照持久化象的状态来同步更新数据库

Flush()后只是将Hibernate缓存中的数据提交到数据库,如果这时数据库处在一个事物当中,则数据库将这些SQL语句缓存起来,当Hibernate进行commit时,会告诉数据库,你可以真正提交了,这时数据才会永久保存下来,也就是被持久化了.

commit针对事物的
flush针对缓存的
同步到数据库中后只要没有commit还是可以rollback的

 public void testSave1() {
  Session session = null;
  Transaction tx = null;
  try {
   session = HibernateUtils.getSession();
   tx = session.beginTransaction();
   User1 user = new User1();
   user.setName("李四");
   user.setPassword("123");
   user.setCreateTime(new Date());
   user.setExpireTime(new Date());
   
   //因为user的主键生成策略采用的是uuid,所以调用完成save后,只是将user纳入到了session的管理
   //不会发出insert语句,但是id已经生成,session中existsInDatebase状态为false
   session.save(user);
   
   //调用flush,hibernate会清理缓存,执行sql
   //如果数据库的隔离级别设置为未提交读,那么我们可以看到flush过的数据
   //并且session中existsInDatebase状态为true
   session.flush();
   
   //提交事务
   //默认情况下commit操作会先执行flush清理缓存,所以不用显示的调用flush
   //commit后数据是无法回滚的
   tx.commit();
  }catch(Exception e) {
   e.printStackTrace();
   tx.rollback();
  }finally {
   HibernateUtils.closeSession(session);
  }
 }
public void testSave2() {
  Session session = null;
  Transaction tx = null;
  try {
   session = HibernateUtils.getSession();
   tx = session.beginTransaction();
   User2 user = new User2();
   user.setName("张三1");
   user.setPassword("123");
   user.setCreateTime(new Date());
   user.setExpireTime(new Date());
   
   //因为user的主键生成策略为native,所以调用session.save后,将执行insert语句,返回有数据库生成的id
   //纳入了session的管理,修改了session中existsInDatebase状态为true
   //如果数据库的隔离级别设置为未提交读,那么我们可以看到save过的数据
   session.save(user);

   tx.commit();
  }catch(Exception e) {
   e.printStackTrace();
   tx.rollback();
  }finally {
   HibernateUtils.closeSession(session);
  }
 }

 

转载于:https://www.cnblogs.com/afeng2010/p/10214287.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值