我最近遇到了一个问题,即在执行本机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将在执行以下操作时自动触发刷新 本机查询。
我可能会缺少什么?
答案 0 :(得分:1)
实际上,根据provided documentation,它可以正常工作。有两个带有Session
的示例。第一个是示例359。使用Session在本地SQL上自动刷新,它具有两个断言。请注意,第二个断言将zero
比较为期望值。第二个示例是 Example360。在具有会话同步的本机SQL上自动刷新,其中第二个断言的期望值为one
。因此,要实现预期的行为,您必须启用如图所示的同步