Hibernate commit() 和flush() 的区别
来源:互联网 发布:ti6双败赛制 知乎 编辑:程序博客网 时间:2024/05/20 11:24
- <<精通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);
- }
- }
0 0
- Hibernate commit() 和flush() 的区别
- Hibernate commit() 和flush() 的区别
- Hibernate中commit()和flush()的区别
- Hibernate commit() 和flush() 的区别
- Hibernate commit() 和flush() 的区别
- hibernate中的session.flush()和commit()的区别
- hibernate commit和flush
- Hibernate中session的flush方法和commit()方法区别
- 论hibernate中的session.flush()和transaction.commit()的差异
- Flush和Commit的理解
- hibernate flush和clear方法的区别
- Hibernate session flush commit
- hibernate flush与commit
- HIbernate commit() and flush()
- hibernate的缓存机制与生命周期——flush和commit方法
- Hibernate中持久化上下文的flush操作之一COMMIT
- 【mysql】sqlalchemy commit 和 flush
- Hibernate:session.flush与transaction.commit
- UITableView和UITableViewCell在iOS不同版本中的结构差异
- Python抓网页生成Excel文件
- 【问底】徐汉彬:高并发Web服务的演变——节约系统内存和CPU
- 分数序列求和
- mysql开启远程登录权限
- Hibernate commit() 和flush() 的区别
- 关于Android中https的网络访问的问题z
- RequireJS和AMD规范
- (1.3.2)查找:顺序查找与哨兵
- iOS开发多线程篇—创建线程
- 也说linux使用squid和squidGuard配置代理服务器
- python自然语言处理笔记-第三章
- 安提尼亚为您介绍健康塑身内衣的功能作用
- Linux-千兆网卡驱动实现机制浅析 原文地址:http://blog.csdn.net/fengying765/article/details/6776394