Hibernate - StaleObjectStateException в запросе возможно? - PullRequest
2 голосов
/ 26 февраля 2010

Возможно ли получить StaleObjectStateException с Hibernate, когда вы делаете один и тот же запрос дважды в течение одной передачи, если данные результата этого запроса изменяются при параллельном обновлении в другой сессии между первым и вторым запросом? 1002 *

Я использую оптимистический контроль параллелизма для всех объектов в этом сценарии.

Так это выглядит так.

Тема-1: транзакция начинается
Поток-1: запрос выполняется и получает порядок с ключом = 4711
Поток-2: тот же порядок с ключом 4711 извлекается, изменяется и фиксируется во втором потоке
Поток-1: запрос выполняется снова и должен вернуть порядок с ключом = 4711

Получу ли я StaleObjectStateException в теме 1 во втором запросе?

Спасибо за вашу помощь!

Thomas

Ответы [ 2 ]

1 голос
/ 11 марта 2010

Отказ от ответственности: я не пробовал, это то, что ожидать от того, что я знаю о спящем режиме.

Вы получите не получите StaleObjectStateException при выполнении второго запроса, ни когдатранзакция из потока-1 фиксируется.

Однако, если order был изменен до выполнения второго запроса, order будет сброшено (при условии режима автоматической очистки и транзакции чтения-записи).) непосредственно перед выполнением второго запроса, и это вызовет StaleObjectStateException.

0 голосов
/ 27 февраля 2010

Я так не думаю. Второй запрос в Thread-1 даже не попадает в базу данных, вы получите (устаревший) объект из кэша 1-го уровня (Session). Но если вы измените порядок после второго запроса, вы получите исключение при очистке сеанса.

...