gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 11:25:30 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com