微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

原文地址:https://www.jb51.cc/java/123329.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐