gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 06:28:33 24 4
gpt4 key购买 nike

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() 一切都只在实例级别完成,而没有真正改变数据库?

最佳答案

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

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

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

你的问题有类似的引用here

关于java - Hibernate 中的 transaction.commit() 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14622962/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com