在本地SQL查询之前不会刷新Hibernate会话

时间:2019-04-16 09:04:51

标签: java hibernate

我最近遇到了一个问题,即在执行本机SQL查询之前,休眠会话不会被刷新。创建的会话的刷新模式为 AUTO 。对于实体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所读到的

相反
  

会话API将在执行以下操作时自动触发刷新   本机查询。

我可能会缺少什么?

1 个答案:

答案 0 :(得分:1)

实际上,根据provided documentation,它可以正常工作。有两个带有Session的示例。第一个是示例359。使用Session在本地SQL上自动刷新,它具有两个断言。请注意,第二个断言将zero比较为期望值。第二个示例是 Example360。在具有会话同步的本机SQL上自动刷新,其中第二个断言的期望值为one。因此,要实现预期的行为,您必须启用如图所示的同步