Спящая несогласованность - PullRequest
2 голосов
/ 29 марта 2012

Я использую Hibernate с MySql, когда я запускаю свой локальный сервер и передаю запросы, возвращаемые значения являются согласованными и правильными.Если я обновляю базу данных с помощью updateQuery или вручную, открывая MySql Workbench, запрос select иногда возвращает старое значение, а иногда и новое значение.Это известная проблема?Я удостоверился, что у меня есть beginTransaction и commitTransaction перед каждым вызовом select, а также перед любой транзакцией вставки / обновления.Самое смешное, что до тех пор, пока я не коснусь базы данных после перезапуска, возвращаемые значения будут идеальными.

1 Ответ

2 голосов
/ 29 марта 2012

Пожалуйста, повторите то же самое с отключенным кэшированием Hibernate ( кэш второго уровня и кэш запросов ).Для этого установите следующие свойства в false в конфигурации Hibernate или Spring:

  • hibernate.cache.use_query_cache
  • hibernate.cache.use_second_level_cache

Это должно привести к тому, что Hibernate будет каждый раз возвращаться к базе данных и отображать результаты в том виде, как они есть в базе данных.Обратите внимание, что Hibernate по-прежнему использует кэш сеанса первого уровня, который используется во время сеанса (обычно одной транзакции).Кроме этого, теперь он всегда должен идти в базу данных и отображать актуальные результаты, даже если вы измените данные непосредственно в БД.

После того, как вы убедились, что это работает, вы можете включитьснова кешируйте и убедитесь, что они работают как задумано.Обязательно прочитайте документацию Hibernate по кэшированию, особенно различные стратегии кэширования ( только для чтения , чтение-запись , ...): http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/performance.html#performance-cache

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