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=?
数据库也更新了.
解决方法
@H_404_28@ 提交将使数据库提交.持久对象的更改将写入数据库.Flushing是同步底层持久化的过程
存储持久状态存储在内存中.
即.它将在运行中更新或插入到您的表中
事务,但它可能不会提交这些更改(这取决于
你的冲洗模式).
当你有一个持久的对象,你改变一个
它的价值,它变得脏,休眠需要刷新这些
更改您的持久层.它可以自动执行
您或您可能需要手动执行,这取决于您的齐平
模式(自动或手动):)
所以简而言之:transaction.commit()会刷新会话,但它也会结束工作单元.
有一个类似的参考你的问题here