LockMode в EJB3 Persistence NamedQuery

Как указать LockMode в EJB3 Persistence NamedQuery? Я хочу добавить Pessimistic LockMode к моему существующему выбору, чтобы я мог обновлять его при необходимости, но, что удивительно, объект 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);

Я бы предположил, что мне не нужно вручную изменять запрос, чтобы «выбрать для обновления».

Спасибо, Кевин.


person phewataal    schedule 20.10.2011    source источник


Ответы (1)


Пессимистический режим блокировки:

  • PESSIMISTIC_READ, который представляет общую блокировку. Запрос на блокировку завершается неудачей, когда другой менеджер объектов получает PESSIMISTIC_WRITE.

  • PESSIMISTIC_WRITE, который представляет монопольную блокировку. Запрос на блокировку завершается ошибкой, когда другой менеджер сущностей получает любую из блокировок объекта.

Применение блокировки к объекту

entityManager.lock(object, LockModeType.PESSIMISTIC_READ)

Снятие блокировки после

entityManager.lock(object, LockModeType.NONE)
person Nayan Wadekar    schedule 10.11.2011
comment
Могу ли я применить блокировку к объекту, полученному с помощью NamedQuery? Или это должен быть только объект, возвращаемый em.find? У меня есть что-то вроде: Query query = em.createNamedQuery(findRecords); query.setParameter(incomingInd, incomingInd); запрос.getResultList().получить(0); - person phewataal; 15.12.2011
comment
Да, вы можете применить режим блокировки к NamedQuery с помощью необязательного элемента — lockMode в его определении. - person Nayan Wadekar; 17.12.2011
comment
Для этого требуется версия JPA 2.0, - person Nayan Wadekar; 26.12.2011