Вопрос

Я использую пружину для DI и Hibernate для доступа к данным на базе данных MySQL.У меня есть код внутри транзакции, которая вставляет запись в таблицу, а затем выполняет представление, которое запрашивает эту таблицу и выполняет некоторые совокупные расчеты.Проблема, которую я вижу, состоит в том, что запись, которую я только что вставил в той же транзакции, не включен в расчетные значения представления.Я запускаю тот же вид в Workbench MySQL, и вставленное значение включено в виду.Кто-нибудь знает, что вызывает это?

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

Решение

В конечном итоге мне пришлось позвонить EntityManager.refresh (объект объекта), чтобы обновить объект для записи, которую я хотел обновить.Я думаю, что проблема проживает в том, что гибернат не может признать, что представление необходимо обновить, поскольку он не знает, что он зависит (на уровне базы данных) на исходном объекте, который был обновлен.Я предполагаю, что Hibernate кэширует записи с вида и не знает, что им нужно обновлять, даже после промывки ().

Hibernate видит оригинальную таблицу и представление как совершенно не связанное, когда на самом деле представление зависит от таблицы и должна быть сделана «грязным» всякий раз, когда таблица изменяется.Я не знаю, как обратиться к гибернации, чтобы узнать это.

Другие советы

Большинство, вероятно, вы еще не смыли изменения в базе данных.Hibernate не знает, что между таблицей вы вставлены строки, и представить, что вы читаете позже.Flush EntiteManager (или сеанс или шаблон) перед запросом представления.

Это, скорее всего, вызвано уровнем изоляции по умолчанию MySQL, который является REPEATABLE READ.

Это означает, что ваша транзакция в Workbench MySQL не увидит изменения до тех пор, пока вы end end этой транзакции.Запуск выбора считается как транзакция.

Вы должны увидеть изменения в MySQL Workbench, как только вы выпустите коммит (или откат).

Вы, вероятно, хотите изменить уровень изоляции по умолчанию для вашей установки для READ COMMITTED или изменение уровня изоляции вашего сеанса в MySQL Workbench для GeneracodicCode

Детали о том, как вы делаете, можно найти в руководстве.

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