转: Hibernate commit() 和flush() 的区别
2016-01-15 12:06
417 查看
[java] view plaincopyprint? <<精通Hibernate java对象持久化技术详解>> ,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); } }
相关文章推荐
- hdu1978
- 详解Linux系统中crontab命令处理定时任务的用法
- Codeforces Round #339 (Div. 2)-B. Gena's Code(字符串模拟)
- Ado.Net小练习03(省市联动)
- Ado.Net小练习03(省市联动)
- 网址备录
- scrapy实战一
- 头像剪裁
- swift-1
- android 启动adb
- thinkphp验证码
- MySQL Cluster 优点和缺点
- django 复合主键(composit primary key)
- boost::bind的使用方法
- 【深度】2015年自然语言处理顶级会议EMNLP都讲了些什么?
- coocox学习笔记-串口
- Jquery Scroll 事件
- HDU2955(动态规划背包)
- ZeroMQ to .Net 发布订阅 dotnet体系
- LUA解析json小demo