Мы столкнулись с StaleStateException
в нашем коде, в основном со следующей ошибкой Hibernate - Batch update returned unexpected row count from update: 0 actual row count: 0 expected: 1
.
Эта ошибка не была замечена, когда мы использовали базу данных Oracle 12 c, но она начала появляться только после перехода на PostgreSQL 12.1.
Проходя через следующую статью , я обнаружил, что:
Oracle не не поддерживает повторяющиеся операции чтения - я предполагаю, что это означает, что новое значение, которое будет считываться Hibernate, будет последним подтвержденным значением в БД Oracle в этот момент времени, а не подтвержденным значением, которое читается во время начало сделки. Я прав?
Postgres поддерживает повторяющиеся чтения - я полагаю, это означает, что если мы читаем значение в начале транзакции, мы получаем зафиксированное значение в этот момент времени, и всякий раз, когда мы выполняем чтение в течение одной и той же транзакции, мы получаем одно и то же значение до тех пор, пока транзакция не будет зафиксирована, даже если новое значение зафиксировано в базе данных после первоначального чтения. Я снова прав?
- Я полагаю, что проверка ожиданий наступает после коммита. Не так ли?
Итак, мой вопрос ... Отличаются ли ожидания Hibernate в этих случаях (postgres, oracle)? то есть ожидаемое число строк имеет какое-либо отношение к наличию / отсутствию повторяющихся операций чтения?
Существуют ли другие возможные причины для StaleStateException
, не встречающегося в Oracle, а только в PostgreSQL?