Java Hibernate 为什么namedQuery上的executeUpdate首先执行全表更新?

标签 java mysql hibernate hql named-query

我有一个像这样的简单 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();

有时我会在控制台中看到从实体中进行的选择,例如实体的完整更新。我不明白为什么会发生这种情况;如果我真的想更新一个简单的字段,为什么 Hibernate 会更新我所有的字段?当这种情况发生时,namedQuery 的唯一一次更新似乎毫无用处,因为我认为之前已更新过。

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

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

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

update
    Entity
set
    SINGLE_FIELD_UPDATE  
where
    ID=?

正如我所提到的,完整更新有时会出现有时,有时完整更新会在 namedQuery 更新之前出现两次被处决!

这是为什么呢?为什么 Hibernate 在执行 namedQuery 中的实际字段之前会触发完整更新和两倍的完整更新?

我错过了什么吗?

最佳答案

请用

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

参见here

关于Java Hibernate 为什么namedQuery上的executeUpdate首先执行全表更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38292472/

相关文章:

mySQL 子查询 - 如果可能的话单次传递

hibernate - 尝试设置 Tomcat 和 JDBC 连接池 : Communications Link Failure

java - HIbernate映射异常: PropertyNotFoundException: Could not find a setter

Java正则表达式从大量文本中提取整数

javascript - 我想通过单击按钮将小程序的任何参数发送到浏览器。 (网页)

java - java中多线程的问题

mysql - 如何根据同一行中的其他列值更新mysql表列

java - 如何将 cURL 转换为改造正确的形式?

php - SQL 查询中的 foreach 循环

java - 使用 Spring Data JPA 进行 HQL 继承