Показать сообщение отдельно
Старый 08.12.2020, 18:22   #2  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,996 / 3293 (117) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от mazzy Посмотреть сообщение
...Но record.selectForUpdate() у меня всегда возвращает false.

Как сделать так, чтобы полученную из getByKey можно было обновить методом update, не выполняя повторного поиска.

Я правильно понимаю, что начав использовать UnitOfWork, мы должны использовать только его? Ну, или выполнять повторный поиск в базе?
Может что-то типа такого
\Classes\InventCostItemDim\updateInventTrans
X++:
protected void updateInventTrans(InventTrans _inventTrans)
{
    if (_inventTrans.RecId)
    {
        _inventTrans.skipTTSCheck(true); // !!!
        this.updateCostAmountStd(_inventTrans);
        _inventTrans.update(); // !!!
    }

    this.updateInventTransMap(_inventTrans);
}
В закрытии склада буфер доставали из мапа, т.е. никакого курсора с ним не связано, просто структура в памяти с полями. И процитированным способом он успешно обновлялся в БД без перевыбора записи. Но, если мне не изменяет память при заполнении мапа с InventTrans, запись выбиралась forUpdate c наложением блокировки в БД.


Хотя возможно для UnitOfWork возможен другой подход.