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