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

Java Hibernate中的transaction.commit()是什么?,java,mysql,database,hibernate,Java,Mysql,Database,Hibernate,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.getBala

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()
,所以数据库中没有任何更改

这是否意味着一切只在某些实例/对象上完成,而没有真正更改数据库

我刚开始冬眠,所以请帮我理解。 我正在使用Hibernate4

更新:

如果我调用transaction.commit(),则结果为此行

Hibernate: update account set balance=? where id=?
数据库也更新了


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

commit将使数据库提交。对持久对象的更改将写入数据库。 刷新是同步基础持久化进程的过程 在内存中保持持久状态的存储。 它将在运行中更新或插入到您的表中 事务,但它可能不会提交这些更改(这取决于 您的刷新模式)

当您有一个持久化对象并且更改了 值,它会变脏,hibernate需要刷新这些值 对持久层的更改。它可能会自动执行此操作 您或您可能需要手动执行此操作,这取决于您的刷新 模式(自动或手动):)

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

你的问题也有类似的提法

无论您要做什么,写操作都不能在外部完成 事务,Hibernate将在没有正在进行的 事务并引发异常。所以这里别无选择

我将@pasacal:添加到上述引用中,但这不会产生任何效果 DB,直到您提交事务

更多参考