Влияет ли REPEATABLE READ на ожидания Hibernate? - PullRequest
0 голосов
/ 04 мая 2020

Мы столкнулись с StaleStateException в нашем коде, в основном со следующей ошибкой Hibernate - Batch update returned unexpected row count from update: 0 actual row count: 0 expected: 1.

Эта ошибка не была замечена, когда мы использовали базу данных Oracle 12 c, но она начала появляться только после перехода на PostgreSQL 12.1.

Проходя через следующую статью , я обнаружил, что:

  1. Oracle не не поддерживает повторяющиеся операции чтения - я предполагаю, что это означает, что новое значение, которое будет считываться Hibernate, будет последним подтвержденным значением в БД Oracle в этот момент времени, а не подтвержденным значением, которое читается во время начало сделки. Я прав?

  2. Postgres поддерживает повторяющиеся чтения - я полагаю, это означает, что если мы читаем значение в начале транзакции, мы получаем зафиксированное значение в этот момент времени, и всякий раз, когда мы выполняем чтение в течение одной и той же транзакции, мы получаем одно и то же значение до тех пор, пока транзакция не будет зафиксирована, даже если новое значение зафиксировано в базе данных после первоначального чтения. Я снова прав?

  3. Я полагаю, что проверка ожиданий наступает после коммита. Не так ли?

Итак, мой вопрос ... Отличаются ли ожидания Hibernate в этих случаях (postgres, oracle)? то есть ожидаемое число строк имеет какое-либо отношение к наличию / отсутствию повторяющихся операций чтения?

Существуют ли другие возможные причины для StaleStateException, не встречающегося в Oracle, а только в PostgreSQL?

...