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)
Другие вопросы по тегам