我有一个使用Hibernate查询的Java Spring项目,我想要使用悲观锁定。
如何在Spring + Hibernate中实现悲观锁定? 编辑:
如何在Spring + Hibernate中实现悲观锁定? 编辑:
@Loggable(value = LogLevel.TRACE)
@Transactional
@Override
public void updateBalance(String id, BigDecimal amount) {
Session session = sessionFactory.getCurrentSession();
sessionFactory.openSession();
Transaction tx = session.beginTransaction();
session.flush();
Account acc = (Account) session.get(Account.class, id, LockMode.UPGRADE);
acc.setName("New Account");
acc.setBalance(acc.getBalance().subtract(amount));
save(acc);
try{
tx.commit();
}catch (TransactionException e){
tx.rollback();
}
session.close();
}
问题:
我想在一个方法中使用悲观锁,并且我从不同的方法中调用此方法。当我从第一个方法中调用它时,悲观锁可以正常工作,但是当我从第二个方法中调用它时,它会出现(事务无法提交)的错误。
异常:
Could not commit Hibernate transaction; nested exception is org.hibernate.
TransactionException: Transaction not successfully started
sessionFactory.getCurrentSession()
之前,打开一个新的 Session(sessionFactory.openSession();
)。3)关闭当前的 Session 对象。 - Arun Kumar