在spring事务中更新时出错

时间:2014-09-22 05:52:17

标签: java spring transactions spring-transactions

我已经做了类似下面的事情,将我的对象保存在spring transaction中的数据库中。

public void saveMyObject() {

    TransactionTemplate template = new TransactionTemplate(transactionManager);
    template.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
    template.execute(new TransactionCallbackWithoutResult() {

        @Override
        public void doInTransactionWithoutResult(TransactionStatus status) {
            someService.update(myobject);
        }
    }); 

}

执行此操作时,我收到如下错误。

java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction

我的代码中可能存在什么问题?

1 个答案:

答案 0 :(得分:2)

它通常称为死锁,这意味着另一个事务使用了你想要的元素,但是你有另一个元素需要另一个事务才能释放它正确的元素现在,所以两个交易都是相互阻止的。 这里有更好的解释:http://docs.oracle.com/javase/tutorial/essential/concurrency/deadlock.html