2014-09-12 5 views
0

Я хотел бы получить пессимистический замок с запросом GORM.пессимистическая блокировка в GORM, где запрос

Что-то вроде

def query = Person.where { 
    firstName == "Bart" 
} 
//instead of where.findAll() 
List personsLocked = where.lockAll() 

Я знаю, я могу добиться того, что по критериям API:

List personsLocked = Person.createCriteria().list { 
    eq('firstName', 'Bart') 
    lock true 
} 

Есть ли способ для достижения этой цели с помощью "где" запроса?

ответ

2

lock не доступен в grails.gorm.DetachedCriteria (результат where) и доступен только с org.codehaus.groovy.grails.orm.hibernate.query.AbstractHibernateCriteriaBuilder предоставленной createCriteira или явным вызовом lock() на случаях и, таким образом, изменяя LockMode к LockMode.UPGRADE

Вы всегда можете использовать оператор с расширением точки и заблокировать результаты после их получения.

+0

При вызове функции lock() на возвращаемых экземплярах я столкнулся с состоянием гонки (в момент, когда объект читается, но все же не заблокирован). Кажется, что мой единственный шанс - переписать запрос к типу критериев. –

Смежные вопросы