Java Hibernate 为什么 namedQuery 上的 executeUpdate 首先执行完整 table 更新?

Java Hibernate Why executeUpdate on namedQuery executes full table update first?

我有一个像这样的简单 NamedQuery

@org.hibernate.annotations.NamedQuery(name="namedQuery",query="update entity set .... where id=:id"

我有这样的方法

public void updateField(final Entity entity){
    final Session session = currentSession();
    final org.hibernate.Query query= session.getNamedQuery("namedQuery")
            ...loadParameters();
    query.executeUpdate();
    return;     
}

这总是可以正常工作,但有时在这行代码中

query.executeUpdate();

有时我会在控制台中看到 select 来自实体 实体的完整更新 。我不明白为什么会这样;如果我真的想更新一个简单的字段,为什么 Hibernate 会更新我所有的字段?发生这种情况时,namedQuery 的唯一一次更新似乎没用,因为我认为之前更新过。

我在控制台中看到了类似的东西

Hibernate: 
/* update
    com.models.Entity */ update
        entity 
    set
        BUNCH OF FIELDS
    where
        ID=?

后来我看到我真正想要的是唯一正在更新的字段

update
    Entity
set
    SINGLE_FIELD_UPDATE  
where
    ID=?

正如我提到的,完整更新有时 有时完整更新出现 两次 =17=] 正在执行!

这是为什么?为什么 Hibernate 在 namedQuery 中的真实字段被执行之前触发一个完整更新和两倍的完整更新?

我错过了什么?

请用

注释您的 class
@org.hibernate.annotations.Entity( dynamicUpdate = true )

here