Grails Пессимистическая блокировка с executeUpdate () - PullRequest
0 голосов
/ 27 мая 2011

Не могу найти никакой информации о том, как использовать пессимистическую блокировку с командой executeUpdate () в grails. Это возможно?

[Обновление] По предложению Берта, это итоговый запрос, который у меня есть. Обратите внимание, что я использовал устаревший UPGRADE вместо PESSIMISTIC_WRITE, поскольку этот параметр отсутствует.

def session = sessionFactory.currentSession
def query = session.createQuery("UPDATE SensorProcessed s SET s.batch=:batch WHERE s.device.id=:deviceId AND s.batch.id=:batchId AND s.sensor.id=:sensorId AND s.rollupKey=:rollupKey")
    query.setLockMode ("s", LockMode.UPGRADE)
    query.setParameter("batch",ignored)
    query.setParameter("deviceId",device.id)
    query.setParameter("batchId",batch.id)
    query.setParameter("sensorId",sensor.id)
    query.setParameter("rollupKey",rollupKey)
    def updatedRows = query.executeUpdate()

Спасибо,
Авраам.

Ответы [ 2 ]

1 голос
/ 27 мая 2011

Это не поддерживается, но достаточно просто, чтобы получить доступ к Hibernate API и использовать его там.Добавьте внедрение зависимости для фабрики сеансов в службу или контроллер:

def sessionFactory

, а затем в своем методе замените вызов executeUpdate обычным обновлением Hibernate:

def session = sessionFactory.currentSession
def query = session.createQuery("your HQL")
query.setLockMode alias, LockMode.PESSIMISTIC_WRITE
// set query variable values
query.executeUpdate()
0 голосов
/ 27 мая 2011

Я только что видел это:

http://grails.org/doc/latest/guide/single.html#5.3.5 Пессимистическая и оптимистическая блокировка

обратите внимание, что вам нужно убедиться, что ваша БД поддерживает пессимистическую блокировку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...