2014-09-22 2 views
0

봄 거래 내 데이터베이스에 내 개체를 저장하려면 다음과 같이했습니다.봄 거래에서 업데이트하는 동안 오류가 발생했습니다.

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 

내 코드의 문제점은 무엇인가요?

+0

동일한 데이터에 대해 다른 거래가있을 때 이러한 현상이 발생할 수 있습니다. –

답변

2

일반적으로 교착 상태를 호출하는 것은 다른 트랜잭션이 원하는 요소를 사용한다는 것을 의미하지만 다른 트랜잭션이 필요로하는 다른 요소를 가지고 있다는 것을 의미합니다 지금은 두 거래가 서로를 차단합니다. 여기에서 더 나은 설명 : http://docs.oracle.com/javase/tutorial/essential/concurrency/deadlock.html