2013-03-28 1 views
1

나는 JPA 낙관적 잠금으로 시작하고 있습니다. 다음 시나리오를 달성해야합니다.Eclipselink의 특별한 경우 JPA 낙관적 잠금

사용자 위치 일부 요청을 요청하십시오. 이 요청은 상태 인입니다. 그냥 넣는 동안 상태는 이고 '신품'입니다. 그런 다음 여러 서비스가이 요청을 관찰하고 상태를 변경하여 서비스를 제공 할 수 있습니다. (상태는 예를 들어 'handling', * 'put_back'*, 'finished') 일 수 있습니다. 그래서, 나는 optimistic locking을 사용하여 하나의 서비스 만 현재 요청을 처리하고 있는지 확인한다. 그래서 다른 서비스가 'new'의 요청 상태를 'handling'에 넣으려고하면 OptimisticLockingException이 나옵니다. "요청의 현재 상태가 변경되었습니다. 요청을 새로 고침하십시오. 명부". 그건 정상적으로 들리 네요. 따라서 두 서비스가 같은 요청을 동시에 처리하려고 할 때 상황이 발생합니다.

그러나 내 특별한 요구 사항은 사용자가 상태를 'cancellated'로 설정하여 요청을 취소 할 수 있다는 것입니다.. 그래서이 경우에도 OptimisticLockingException 예외를 얻을 수 있습니다. 그러나 나는 그것을 필요로하지 않는다. 따라서 요청은 취소되지 않습니다. 여기에 다른 사람이 변경했는지에 상관없이 상태를 '취소됨'으로 지정하려고합니다. 사용자가 요청을 다시 취소하지 말아야한다고 생각합니다.

내 질문은입니다. EclipseLink를 사용하여 이러한 상황을 어떻게 처리 할 수 ​​있습니까? 2.4.1 지속성을 위해 사용하고 있습니다.

참고 : 저는 JPA에서 낙관적 인 잠금 기능을 처음 사용 했으므로 놓칠 수 있으므로 제발 수정하십시오.

답변

0

나는 귀하의 응용 프로그램에서 이것을 처리 할 것입니다. cancelRequest() 작업에서 잠금 예외가 발생하면 Exception을 catch하고 커밋 될 때까지 트랜잭션을 다시 시도하십시오.

잠금 버전을 확인하지 않으므로 JPQL 업데이트 쿼리를 사용할 수도 있습니다.

+0

고마워. JPQL 업데이트 쿼리를 사용해 보겠습니다. – user1278890

관련 문제