Hibernate commit() 和flush() 的区别
<<精通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);
}
}
分享到:
相关推荐
修改commit信息 git log oneline -n,查看n条log信息 git rebase -i HEAD~n,n条commit进行rebase 将需要修改的commit信息,将pick命令改为 r 命令;ESC 输入 :wq 回车 开始修改commit信息,修改完,ESC 输入 :wq ...
使用方式: 1、解压package.rar package.rar 2、进入package文件夹,右键打开git bash 3、执行 sh install.sh 进行...4、执行git init 命令,查看当前目录是否生成 .git/gitcommit 和 .git/hooks/commit-msg 验证
idea commit 模板插件
commit工业调试1.4
Jim Gray 和 Leslie Lamport 两位图灵奖合著的论文 The distributed transaction commit problem requires reaching agreement on whether a transaction is committed or aborted. The classic Two-Phase Commit...
commit-comments 会根据你代码中评论的变化而自动创建一个提交评论的无序列表。使用关键字 @commit 写评论时,commit-comments 会你在点击提交时,自动添加你的评论信息。依赖:GNU sed 需要在 post-commit 中移除 @...
一、query.scroll()和query.setFirstResult(),query.setMaxResults();这两种方法都可以取到一定范围内的数据,用来数据分页显示。那么两者区别,以及两者的效率如何? 答:1.scroll是用JDBC2.0的可滚动结果集实现;...
里面包含了pre-commit.bat批处理和pre-commit.exe两种方式
svn commit-email For mail list
这样的好处,减少了事务数据丢失的概率,而对底层硬件的 IO 要求也没有那么高(log buffer 写到文件系统中,一般只是从 log buffer 的内存转移
commit-msg 提交信息commit-msg 提交信息commit-msg 提交信息commit-msg 提交信息commit-msg 提交信息commit-msg 提交信息
svn 自动 commit 的实现 , 详见 博文 “svn 自动 commit 的实现”
04★Git入门★第一次提交_git_commit
缩短GitHub链接,如GitHub缩短Issues和Commit链接一样
可以看到,只有1才能真正地保证事务的持久性,但是由于刷新操作 fsync() 是阻塞的,直到完成后才返回,我们知道写磁盘的速度是很慢的,因此 MySQL 的性能
To remedy related download errors, a new Commit.gitdeps.xml file is attached to this release as an Asset. Please replace the existing Engine/Build/Commit.gitdeps.xml with the attached file.
commit-template-idea-plugin commit-template-idea-plugin commit-template-idea-plugin
NULL 博文链接:https://zgdkik.iteye.com/blog/1835667
通过在pre-commit文件查看用户的动作来限制删除文件的动作,通过查看用户输入的log信息长度,限制用户提交log