Проблема транзакции в спящем режиме - PullRequest
0 голосов
/ 23 декабря 2009

Когда я выполняю некоторые запросы внутри транзакции Hibernate -> данные успешно обновляются в моем mysql, но в моем приложении все еще есть старые значения. Когда я перезагружаюсь - все нормально. Если я установил режим автоматической фиксации - работает нормально, но я должен использовать транзакцию ;-). Есть идеи? Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 23 декабря 2009

Управление базой данных напрямую с помощью UPDATE не влияет на объекты, кэшированные в сеансе. Вы должны очистить сеанс (Session.clear ()). Что-то вроде:

session.flush()
session.clear()
query.executeUpdate()

Или, что еще лучше, вы можете избежать этой проблемы, не используя запросы на обновление и манипулируя состоянием объекта в памяти:

myobj.setName(newValue)
session.saveOrUpdate(myobj)    
0 голосов
/ 26 июня 2016

В hibernate либо вы используете JPA API, либо собственный API Hibernate, любой запрос, который вы выполняете, используя интерфейс ниже

  1. Критерии (Hibernate Native API)
  2. Запрос (Hibernate Native API)
  3. EntityManager createQuery () (JPA)

Запросы не взаимодействуют с кэшем второго уровня или первого уровня. Они напрямую попадают в базу данных. Если ваш запрос обновляет сущности, находящиеся в настоящее время в контексте постоянства, эти сущности не будут отражать изменения. Это поведение по умолчанию.

Чтобы обновить свой контекст, чтобы показать последнее состояние объекта, используйте refresh () в Session или EntityManager, чтобы отразить последнее состояние объекта в контексте постоянства. Прочитайте документы ниже для получения дополнительной информации

http://docs.oracle.com/javaee/7/api/javax/persistence/EntityManager.html#refresh-java.lang.Object-

https://docs.jboss.org/hibernate/orm/3.5/javadocs/org/hibernate/Session.html#refresh%28java.lang.Object%29

В противном случае, как правило, всегда запускайте DML перед загрузкой любых данных в контексте постоянства.

Надеюсь, это поможет: D

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