我们如何在EJB3 Persistence NamedQuery中指定LockMode?我想将悲观的LockMode添加到我现有的select中,以便我可以在必要时进行更新但令人惊讶的是Query对象没有setLockMode(xxx)方法(我的理解是,如果JPA,EJB3持久性的子集,暴露setLockMode,EJB3持久性应该有方法可用太)。
Query query = em.createNamedQuery("findOptoutStudent");
query.setParameter("optoutIndicator", optoutIndicator);
List<Student> students = query.getResultList();
return students.get(0);
我认为我不必手动将查询更改为“select for update”。
由于 凯文
答案 0 :(得分:0)
悲观锁定模式:
PESSIMISTIC_READ
代表共享锁。当另一个实体经理获得PESSIMISTIC_WRITE
时,锁定请求失败。
PESSIMISTIC_WRITE
表示独占锁定。当另一个实体管理器获取了对象上的任何一个锁时,锁定请求失败。
在对象上应用锁定
entityManager.lock(object, LockModeType.PESSIMISTIC_READ)
之后释放锁定
entityManager.lock(object, LockModeType.NONE)