【发布时间】:2010-11-16 17:13:37
【问题描述】:
我很惊讶最近得知默认休眠行为是更新对象中的所有字段,如果只进行一次更改并调用合并。
Dynamic-update 是允许您配置仅更新已更改字段的替代方法的字段...
http://www.mkyong.com/hibernate/hibernate-dynamic-update-attribute-example/
我正在使用 JPA 和 hibernate,我尝试添加以下内容
@javax.persistence.Entity
@org.hibernate.annotations.Entity(dynamicInsert=true, dynamicUpdate=true)
到我的班级(以前只有 JPA 注释)
无论如何,我一直在监控 sql,不幸的是它没有改变它,我仍然看到每个字段都更新了。
这是我更新对象的java...
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
public void setAccountStatusForUser(String username, AccountStatus act){
User u = this.getUser(username);
u.setAccountStatus(act);
this.update(u);
}
并且更新方法执行以下操作:
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
public Object update(Object o) {
Object a = this.entityManager.merge(o);
this.entityManager.flush();
return a;
}
任何帮助将不胜感激。
【问题讨论】:
-
你知道调用 update 是完全没有必要的吗? Hibernate 会在事务结束时自动持久化对附加实体所做的更改。
-
嘿,你有没有解决这个问题?我有同样的问题
标签: performance hibernate jpa