【问题标题】:Updating JPA-Hibernate entity without selecting it from database更新 JPA-Hibernate 实体而不从数据库中选择它
【发布时间】:2010-02-25 13:27:43
【问题描述】:

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

我想更新此实体的单个属性,而不会在我的数据库中引起选择。

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

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

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

【问题讨论】:

    标签: hibernate select jpa lazy-evaluation


    【解决方案1】:

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

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

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

    【讨论】:

    猜你喜欢
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 2019-10-25
    • 2018-01-28
    • 1970-01-01
    • 1970-01-01
    • 2012-04-28
    相关资源
    最近更新 更多