加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Hibernate中的transaction.commit()是什么?

发布时间:2020-12-14 05:09:03 所属栏目:Java 来源:网络整理
导读:transaction.commit()做什么? Account account = new Account();account.setId(100);account = (Account) session.get(Account.class,account.getId());System.out.println("Before Transaction: Balance = " + account.getBalance());double preBal = acco
transaction.commit()做什么?
Account account = new Account();
account.setId(100);
account = (Account) session.get(Account.class,account.getId());
System.out.println("Before Transaction: Balance = " + account.getBalance());
double preBal = account.getBalance();
account.setBalance(50000000);
Transaction transaction = session.beginTransaction();
session.update(account);
account = (Account) session.get(Account.class,account.getId());
System.out.println("After Transaction: Balance = " + account.getBalance());
// transaction.commit();    
account = (Account) session.get(Account.class,account.getId());
System.out.println("Pev-Bal=" + preBal + " Curr-Bal=" + account.getBalance());

这给我结果:

Hibernate: select account0_.id as id0_1_,account0_.balance as ..........
Before Transaction: Balance = 300.0
After Transaction: Balance = 5.0E7
Pev-Bal=300.0 Curr-Bal=5.0E7

但是由于我没有调用transaction.commit(),所以数据库没有变化.

这是否意味着一切都只在某些实例/对象上完成,而不会真正改变数据库?

我是Hibernate的新手,所以请帮我理解.
我正在使用hibernate 4.

更新:

如果我调用transaction.commit(),那么结果有这一行

Hibernate: update account set balance=? where id=?

数据库也更新了.

这是否意味着没有调用transaction.commit()一切都只在实例级别完成,而不会真正更改数据库?

解决方法

提交将使数据库提交.持久对象的更改将写入数据库.
Flushing是同步底层持久化的过程
存储持久状态存储在内存中.
即.它将在运行中更新或插入到您的表中
事务,但它可能不会提交这些更改(这取决于
你的冲洗模式).

当你有一个持久的对象,你改变一个
它的价值,它变得脏,休眠需要刷新这些
更改您的持久层.它可以自动执行
您或您可能需要手动执行,这取决于您的齐平
模式(自动或手动):)

所以简而言之:transaction.commit()会刷新会话,但它也会结束工作单元.

有一个类似的参考你的问题here

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读