Показать сообщение отдельно
Старый 02.09.2021, 09:38   #2  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,275 / 3476 (122) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Метод _common.selectForUpdate(true); должен выполняться до выборки данных.
Т.е. сначала _common.selectForUpdate(true);
А потом - select * from common.

Приведенный пример - излюбленный способ тех разработчиков, которым не хочется делать лишний select, а хочется уже после выборки либо обновлять, либо не обновлять запись (сам таким когда-то был - знаю). База данных так не работает. Ей нужно знать до выборки - блокировать ли записи или нет на обновление.
Поэтому правильное решение - перестроить код так, чтобы вызов метода selectForUpdate был бы ДО оператора выборки данных.
Конструкция, приведенная у Вас - может работать (ядро АХ все-таки старается) - но могут быть разные глюки - либо с блокировками при многопользовательской работе, либо с ошибками как у Вас, либо еще какие-то ошибки
__________________
Возможно сделать все. Вопрос времени

Последний раз редактировалось sukhanchik; 02.09.2021 в 09:41.
За это сообщение автора поблагодарили: SRF (1), oleggy (1).