2011-10-20 6 views
0

EJB3 Persistence NamedQuery에서 LockMode를 어떻게 지정합니까? 필요에 따라 업데이트 할 수 있도록 Pessimistic LockMode를 추가하고 싶습니다. 그러나 놀랍게도 쿼리 개체에는 setLockMode (xxx) 메서드가 없습니다. (JPA, EJB3 지속성의 asubset이 setLockMode를 노출하고 EJB3 지속성이 메서드를 사용할 수 있어야합니다. 너무).EJB3 Persistence NamedQuery의 LockMode

Query query = em.createNamedQuery("findOptoutStudent"); 
query.setParameter("optoutIndicator", optoutIndicator); 
List<Student> students = query.getResultList(); 
return students.get(0); 

나는 "수동으로 업데이트를 선택하십시오"라는 쿼리를 변경하지 않아야한다고 가정합니다.

감사 케빈

답변

0

비관적 잠금 모드 :

공유 잠금을 나타냅니다
  • PESSIMISTIC_READ. 다른 엔티티 관리자가 PESSIMISTIC_WRITE을 획득하면 잠금 요청이 실패합니다.

  • PESSIMISTIC_WRITE 독점적 인 자물쇠를 나타냅니다. 다른 엔티티 관리자가 객체에 대한 잠금 중 하나를 획득하면 잠금 요청이 실패합니다.

이후

entityManager.lock(object, LockModeType.NONE) 
+0

내가 NamedQuery에 의해 검색된 객체에 대한 잠금을 적용 할 수있는 잠금을 해제 대상

entityManager.lock(object, LockModeType.PESSIMISTIC_READ) 

에 잠금 장치를 적용? 또는 em.find에 의해서만 반환 된 객체 여야합니까? 나는 다음과 같은 것을 가지고있다 : Query query = em.createNamedQuery ("findRecords"); \t \t query.setParameter ("incomingInd", incomingInd); \t \t query.getResultList(). get (0); – phewataal

+0

예, 선택 요소 인 lockMode를 사용하여 잠금 모드를 NamedQuery에 적용 할 수 있습니다. –

+0

JPA 1을 사용하고 있습니다. 수행 방법을 알려주십시오. – phewataal