EJB3持久性NamedQuery中的LockMode

时间:2011-10-20 16:22:42

标签: persistence ejb-3.0 named-query pessimistic-locking

我们如何在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”。

由于 凯文

1 个答案:

答案 0 :(得分:0)

悲观锁定模式:

  • PESSIMISTIC_READ代表共享锁。当另一个实体经理获得PESSIMISTIC_WRITE时,锁定请求失败。

  • PESSIMISTIC_WRITE表示独占锁定。当另一个实体管理器获取了对象上的任何一个锁时,锁定请求失败。

在对象上应用锁定

entityManager.lock(object, LockModeType.PESSIMISTIC_READ)

之后释放锁定

entityManager.lock(object, LockModeType.NONE)