事务失效java代码案例
时间: 2023-06-22 16:34:58 浏览: 80
以下是一个可能导致事务失效的Java代码案例:
```
public void transferMoney(String fromAccount, String toAccount, double amount) {
// 开启事务
Transaction tx = null;
try {
tx = session.beginTransaction();
// 扣除转出账户金额
Account from = session.get(Account.class, fromAccount);
from.setBalance(from.getBalance() - amount);
session.update(from);
// 增加转入账户金额
Account to = session.get(Account.class, toAccount);
to.setBalance(to.getBalance() + amount);
session.update(to);
// 提交事务
tx.commit();
} catch (Exception e) {
// 回滚事务
if (tx != null) {
tx.rollback();
}
}
}
```
假设在执行第二个update操作时出现异常,导致事务回滚。但是在回滚前,第一个update操作已经执行成功,导致账户的余额已经被扣除,但是转入账户的余额并没有增加,这就是一个典型的事务失效案例。为了避免这种情况,可以在第一个update操作和第二个update操作之间添加一个数据库锁,以保证操作的原子性。
阅读全文