6

我有一个名为 Execution 的休眠实体。它在我的流程开始时创建并在结束时更新,表明它是如何完成的。

我想更新该实体的单个属性,而不导致在我的数据库中进行选择。

Execution execution = entityManager.getReference(Execution.class, executionId); execution.setStatus(Status.FINISHED);//--> 调用此方法会在我的数据库中触发一个 SELECT。我不希望它发生,我只想更新我的实体。

这不是特定于此方法的,任何其他调用的方法都会导致 SELECT 子句。事实上,选择似乎发生在我的方法被调用之前。我的印象是休眠代理在我的类无参数构造器中放置了一些代码,以在每次调用任何方法时触发选择。

是否可以在不触发数据库中的 SELECT 语句的情况下更新 JPA/Hibernate 实体?

4

1 回答 1

1

这就是 Hibernate 的工作原理。每当访问任何非 id 属性时,它的代理对象都会从 DB 加载真实对象。

尝试在进程开始时保存/加载对象(以执行该对象SELECT),并确保在触摸对象时会话不会自动刷新(我认为默认行为是不自动刷新,但值得支票)。

或者您也可以尝试在处理过程中将您的对象从 Hibernate 会话中分离出来。

于 2010-02-25T13:41:18.120 回答