![](/img/trans.png)
[英]hibernate named query error after updating to hibernate 5.0.7 and jpa 2.1
[英]JPA/hibernate: ignored persist after named query
以下的Java代码:
fooDAO.resetField(); // ...namedQuery
foo.setField(true);
fooDAO.persist(foo);
foo.field
是一个布尔属性。
resetField()
执行一个命名查询,该查询将所有数据库行中的字段都设置为FALSE。
如果foo.field
最初为FALSE,则休眠将执行2个SQL查询,即。 setField / persist组合的命名查询和更新查询。 但是,如果foo.field
最初为TRUE,则仅执行第一个SQL查询,该查询将所有行中的字段设置为FALSE,第二个SQL查询将被忽略! ...为什么?
让我从“ 使用批量更新和删除 ”一章中引用ProJPA 2的作者。
...持久性上下文未更新以反映操作结果。 批量操作以SQL的形式针对数据库发出,绕过了持久化上下文的内存结构。(...)开发人员只能依赖批量操作完成后检索到的实体。(...)这意味着批量操作操作应该完全在事务中执行,或者应该是事务中的第一个操作
在您的情况下,建议您重新安排代码以将批量更新包含在其自己的事务中,或者在尝试对其进行更改之前在foo
上调用EntityManager.refresh()
。
您所描述的是预期的行为,因为在批量更新后,您的foo
实例将变得过时。 它存在于内存中,但不能反映现实。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.