LockMode в EJB3 Постоянство NamedQuery
Как мы указываем LockMode в EJB3 Persistence NamedQuery? Я хочу добавить Pessimistic LockMode к своему существующему выбору, чтобы я мог обновлять при необходимости, но неожиданно у объекта Query нет метода setLockMode(xxx) (насколько я понимаю, если JPA, asubset персистентности EJB3, предоставляет setLockMode, персистентность EJB3 должна иметь доступный метод тоже).
Query query = em.createNamedQuery("findOptoutStudent");
query.setParameter("optoutIndicator", optoutIndicator);
List<Student> students = query.getResultList();
return students.get(0);
Я бы предположил, что мне не нужно менять запрос вручную, чтобы "выбрать для обновления".
Спасибо Кевин
1 ответ
Режим пессимистичной блокировки:
PESSIMISTIC_READ
который представляет общую блокировку. Сбой запроса на блокировку, когда другой менеджер объекта получилPESSIMISTIC_WRITE
,PESSIMISTIC_WRITE
который представляет собой эксклюзивный замок. Запрос на блокировку завершается неудачно, когда другой менеджер сущностей получил одну из блокировок на объекте.
Применение блокировки на объекте
entityManager.lock(object, LockModeType.PESSIMISTIC_READ)
Снятие блокировки впоследствии
entityManager.lock(object, LockModeType.NONE)