Рассмотрим сценарий: транзакция базы данных, включающая более одной строки из разных таблиц с управлением версиями.
Например: МагазинСписки и продукты. Где список магазинов может содержать продукты (с их количеством в списке магазинов), а продукты имеют текущий запас.
Когда я вставляю или редактирую список магазинов, я хочу, чтобы запас этих продуктов в списке магазинов обновлялся, чтобы поддерживать постоянный запас.
Для этого я открываю транзакцию, вставляю/обновляю список магазинов, обновляю запасы для каждого продукта (применяю дельту) и затем фиксирую транзакцию. Пока ничего страшного.
Однако другой пользователь мог обновить один или несколько общих продуктов. Или даже обновил сам shopList. В обоих случаях я получил бы исключение StaleObjectStateException при фиксации транзакции.
Вопрос: есть ли способ определить, какая таблица вызвала исключение StaleObjectStateException?
В случае, если продукт вызвал исключение, я мог обновить все включенные продукты из БД, а затем повторно применить стандартные дельты. И это нормально. В случае, если shopList вызвал исключение, было бы лучше просто сообщить о проблеме пользователю, чтобы он мог начать все сначала.
Большое спасибо за вашу помощь.