Запрос гибернации не возвращает свежие данные - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть контроллер следующим образом:

SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Transaction tx = null;
Session session = sessionFactory.openSession();
session.flush();
tx=session.beginTransaction();    

List<Plane> allPlanes = session.createQuery("from Planes").list();      
tx.commit();


session.close();

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

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Как я могу гарантировать, что независимо от того, где обновляются данные, этот запрос всегда будет возвращать свежую копию данных в базе данных?

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

Перед вызовом org.hibernate.query.Query.list() просто вызовите org.hibernate.query.Query.setCacheable(boolean) с false в качестве аргумента для этого запроса .

0 голосов
/ 03 декабря 2018

Вы не можете вносить изменения в базу данных за пределами JPA и ожидать, что JPA узнает об этом.

Существует способ перевести компьютер в спящий режим для сброса, но вам нужно будет запустить свою базу данных, а затем отправить сообщение по сети или вызвать функцию вручную.

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

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