Вопрос

Рассмотрим сценарий: транзакция DB, которая вызывает более одного ряда из разных таблиц с помощью версий.

Например: списки магазинов и продукты. Где магазин может содержать продукты (с их количеством в магазине), а продукты имеют свои текущие запасы.

Когда я вставляю OU Edit Shoplist, я хочу, чтобы запасы этих продуктов в магазине были обновлены, чтобы поддерживать акции.

Для этого я открываю транзакцию, вставляю/обновляю Shop -List, обновляю акции для каждого продукта (Apply Delta), а затем совершаю транзакцию. До сих пор нет большой сделки.

Тем не менее, другой пользователь может обновить один или несколько общих продуктов. Или даже обновил сам магазин. В обоих случаях я получил бы StaleObjectStateException при просмотре транзакции.

Вопрос: есть ли способ определить, какая таблица вызвала StaleObjectStateException?

В случае, если продукт вызвал исключение, я мог обновить все вывитые продукты из БД, а затем повторно применить запасы Deltas. И это нормально. В случае, если Shoplist вызвал исключение, было бы лучше просто сообщить об этой проблеме пользователю, чтобы он мог начать заново.

Большое спасибо за вашу помощь.

Это было полезно?

Решение

Я узнал, как.

Перво -сначала: JPA (или сам спуск) завершает исключение org.hibernate.staleObjectStateException как javax.persistence.optimisticlockexception. Так что, если вы хотите поймать правильное исключение, перейдите к оптимистичному сложности.

Второе: Hibernate будет бросить оптимистичное плавное мнение только тогда, когда вы называете метод EntityManager Flush перед совершением. Если вы позвоните в Commit напрямую, вы получите еще одно исключение (я забыл, что). Учитывая, что почти все поймают эти исключения, выпущенные методом коммита, и отправится на откат транзакции, вы получите связанное исключение отката (не удастся вспомнить, что еще раз).

Третий и последний ответ на мой первоначальный вопрос: вам просто нужно позвонить в метод GetEntity из экземпляра Optimistrockexception, чтобы получить источник ошибки выпуска версий. Это предоставит вам все, что вам нужно, связанное с этим.

Спасибо за всех, кто прошел здесь. Любые вопросы, касающиеся этого, просто спросите, и я буду рад помочь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top