отложенные обновления транзакции в спящем режиме - PullRequest
1 голос
/ 08 апреля 2019

В транзакции гибернации я обновляю строку (session.update(domainObject)), а затем выполняю select count(*) с условием where в той же таблице вместе с соединением в какой-то другой таблице.Я наблюдаю (через журналы), что операция обновления происходит в конце транзакции, и, следовательно, запрос на выборку, который должен выполняться после запроса на обновление, показывает неверный результат.Я не могу понять, почему это происходит.Есть ли отведения?

1 Ответ

1 голос
/ 08 апреля 2019

Когда вы выполняете SELECT, поставщик сохраняемости определяет, следует ли сбрасывать предыдущие операции CRUD, которые были выполнены ранее в той же транзакции.

Это делается для того, чтобы убедиться, что возвращаемый результат верен.

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

Вы можете попробовать:

a) Установите режим промывки на: <property name="org.hibernate.flushMode" value="AUTO"/>. Это должно быть по умолчанию, но вы можете переопределить это. Это необходимо для того, чтобы:

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

b) Установите режим промывки на: <property name="org.hibernate.flushMode" value="ALWAYS"/>.

Будьте осторожны с этим как:

Сеанс сбрасывается перед каждым запросом.

c) Выполните инструкцию session.flush() перед этим запросом (в крайнем случае)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...