我找不到任何关于如何在grails中使用带有executeUpdate()命令的悲观锁定的信息。这可能吗?
[更新] 根据Burt的建议,这是我得到的查询。请注意,我已使用已弃用的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()
谢谢,
亚伯拉罕。
答案 0 :(得分:1)
它不受支持,但它足够简单,可以访问Hibernate API并在那里使用它。将会话工厂的依赖项注入添加到服务或控制器:
def sessionFactory
然后在你的方法中用常规的Hibernate更新替换executeUpdate调用:
def session = sessionFactory.currentSession
def query = session.createQuery("your HQL")
query.setLockMode alias, LockMode.PESSIMISTIC_WRITE
// set query variable values
query.executeUpdate()
答案 1 :(得分:0)