Hibernate commit() 和flush() 的区别
2019独角兽企业重金招聘Python工程师标准>>>
<<精通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状态为falsesession.save(user);//调用flush,hibernate会清理缓存,执行sql//如果数据库的隔离级别设置为未提交读,那么我们可以看到flush过的数据//并且session中existsInDatebase状态为truesession.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);}}
参考:http://blog.sina.com.cn/s/blog_4982a22a0100bp5x.html
转载于:https://my.oschina.net/zlp5201/blog/404227
Hibernate commit() 和flush() 的区别相关推荐
- 页面静态化2 --- 使用PHP缓存机制来完成页面静态化(上)(ob_flush和flush函数区别用法)...
我们可以使用PHP自带的缓存机制来完成页面静态化,但在这里,需要说明一点,仅靠PHP缓存机制并不能完美的解决页面静态化,往往需要和其他页面静态技术(通常是伪静态技术)结合使用 例子: 当访问一个页面时 ...
- C++ endl/ends/flush的区别
endl与ends.flush的区别 endl表示输出并换行,ends表示输出加一个空格,flush表示什么都不加,直接输出 int main() {for (int i = 0; i < 5; ...
- JPA、Hibernate和Spring Data JPA区别
大家好,我是神韵,是一个技术&生活博主.出文章目的主要是两个,一是好记忆不如烂笔头,记录总结中提高自己.二是希望我的文章可以帮到大家.欢迎来点赞打卡,你们的行动将是我无限的动力. 本篇主题是: ...
- Hibernate三种状态(Transient、Persistent、Detached)各种保存(save,persist,update,saveOrUpdte,merge,flush,lock)区别
转载地址:http://www.2cto.com/kf/201212/178604.html 一.三种状态(Transient.Persistent.Detached) 在Hibernate中有三种状 ...
- Hibernate的clear(),flush(),evict()方法详解
最近看了下session,发现session.flush()方法有明显的误人子弟,明显乱说,也不对,讲的不清楚,对此我很气愤,你讲错了的让大家都跟着错了,还到处转载你的错误,你害羞么,我想问下作者. ...
- Hibernate Session的Flush模式
2019独角兽企业重金招聘Python工程师标准>>> 首先要知道的是: Hibernate会尽量将与数据库的操作延迟,直到必须要与数据库进行交互,例如save方法一般会在提交时才真 ...
- Hibernate的openSession和getCurrentSession区别
原文链接:http://blog.csdn.net/xiao__gui/article/details/7695698 很多资料从理论上解释hibernate的openSession和getCurre ...
- Hibernate getCurrentSession()和openSession()的区别
通过getCurrentSession()创建的Session会绑定到当前线程上:openSession()不会. 通过getCurrentSession()获取Session,首先是从当前上下文中寻 ...
- Hibernate openSession() 和 getCurrentSession的区别 .
getHiberanteTemplate .getCurrentSession和OpenSession 采用getCurrentSession()创建的Session会绑定到当前的线程中去.而采用Op ...
最新文章
- 航天智慧物流!智能汽车竞赛—航天赛道开始报名啦!
- mask rcnn算法分析_在modelarts上部署mask-rcnn模型
- CLI下的网页浏览器之二——Lynx
- div中同时存在文本和数字超过两行出省略号
- 今天的我家有12口人的即时通讯
- 【Elasticsearch】elasticsearch 分片
- C#+HtmlAgilityPack+Dapper走一波爬虫
- Mysql5.7中文乱码
- Linux脚本中带有小数点的数值比较大小
- html5 拖放游戏,HTML5拖放API实现拖放排序的实例代码
- spring boot访问zul页面总是变为下载页面
- Executing statements
- 奥运门票系统down机的技术问题
- ASP.NET 基于asp.net设计项目框架
- javapoet的认识
- ME59N 自动创建采购订单的凭证类型NB变更为指定类型Zxxx
- 如何持续、正确、安全地把材料性能检测试验做好:“清单革命”读书报告
- 从“赌场”到“大市场”——巴菲特进阶式看中国
- LeetCode知识点总结 - 844
- 花了三年时间开发的四轴运动控制卡,可以替代mcx314运动控制IC
热门文章
- stacking与blending的区别
- 计算机科学与技术分享会,“相伴成长,绘梦未来”——计算机科学学院计算机科学与技术专业举办交流分享会...
- 【postgresql初始化失败】initdb: invalid locale settings; check LANG and LC_* environment variables(之二)
- 自定义注解做数据验证
- 项目进度管理:定义活动
- 删除文件夹中包含的子文件夹及文件
- Three.js中实现点击按钮添加删除旋转立方体
- Android入门学习教程PDF免费下载
- VS中使用C#开发一个登录窗体应用程序
- Python中通过MyQR生成gif动图二维码