簡體   English   中英

春天悲觀鎖定

[英]Spring Pessimistic locking

我在java下使用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

http://www.amicabile.com/hybernate/hybernate-chapter5.html

http://javacompleteexamples.blogspot.com/2009/07/how-db-locking-system-works-in.html

編輯:

嘗試:

@Override
@Loggable(value = LogLevel.TRACE)
@Transactional
public void updateBalance(String id, BigDecimal amount) {
        Account acc = (Account) sessionFactory.getCurrentSession().get(Account.class, id, LockMode.UPGRADE);
        acc.setBalance(acc.getBalance().subtract(amount));
        save(acc);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM