不从数据库中选择JPA-Hibernate实体进行更新

6
我有一个称为Execution的Hibernate实体。它在我的流程开始时创建,并在结束时更新,表示它如何完成。
我想更新此实体的单个属性,而不会导致在我的数据库中进行选择。 Execution execution = entityManager.getReference(Execution.class, executionId); execution.setStatus(Status.FINISHED); //--> 调用此方法会在我的数据库中触发SELECT。我不希望它发生,我只想更新我的实体。
这并非特定于此方法,任何其他调用的方法都会导致SELECT子句。实际上,在调用我的方法之前,选择似乎已经发生了。我的印象是,Hibernate代理在我的类no-args构造函数中放置了一些代码,以便在调用任何方法时都会触发选择。
是否可以更新JPA / Hibernate实体而不在我的数据库中触发SELECT语句?
1个回答

1

这是 Hibernate 的工作原理。它的代理对象在访问任何非 ID 属性时从数据库加载真实对象。

尝试在过程开始时保存/加载对象(执行该 SELECT),并确保会话不会在触碰对象时自动刷新(我认为默认行为是不自动刷新,但最好检查一下)。

或者在处理期间也可以尝试从 Hibernate 会话中分离对象。


1
我会接受这个答案作为正确的答案。我发现了一个更简单的解决方案,通过使用JPA-QL批量更新/插入http://docs.jboss.org/hibernate/stable/entitymanager/reference/en/html/batch.html#batch-direct - user266391
@user266391 我不熟悉JPA,所以感谢提供链接 :-) - Péter Török

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接