Hibernate Session не сбрасывается перед собственным SQL-запросом - PullRequest
1 голос
/ 16 апреля 2019

Недавно я столкнулся с проблемой, когда сеанс гибернации не сбрасывается перед выполнением собственного запроса SQL. Флешмод созданного сеанса: АВТО . Для объекта A код выглядит как

A a=aDao.getById(session,id);
  a.setB(3);
  ...
   String query = "select count(*) as total from A a where a.b=3";
   session.createSQLQuery(query)
             .addScalar("total", StandardBasicTypes.).uniqueResult();

Проблема в том, что я получаю неправильные результаты с запросом count(*), потому что сеанс не сбрасывается перед выполнением запроса. Если я сделаю

session.flush();

до count(*) запроса, тогда он работает просто отлично. Это противоречит тому, что я прочитал из https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#flushing-auto, в котором говорится, что

Session API автоматически выполнит сброс при выполнении собственный запрос.

Чего мне не хватать?

1 Ответ

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

На самом деле в соответствии с предоставленной документацией все работает как положено. Есть два примера с Session. Первый - Пример 359. Автоматическая очистка на нативном SQL с использованием Session И у него есть два утверждения. Обратите внимание, что второе утверждение сравнивает zero как ожидаемое значение. И второй пример - Пример 360. Автоматическая очистка на нативном SQL с синхронизацией сеанса , где второе утверждение имеет one в качестве ожидаемого значения. Поэтому для достижения ожидаемого поведения вы должны включить синхронизацию, как показано

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