【发布时间】:2010-03-03 09:36:55
【问题描述】:
即使实体不脏,我如何强制 Hibernate 更新实体实例?我正在使用 Hibernate 3.3.2 GA、Hibernate Annotations 和 Hibernate EntityManager btw。我真的希望 Hibernate 执行通用的 UPDATE 语句,即使实体上的属性没有更改。
我需要这个,因为当应用程序第一次运行时,一些事件监听器需要被调用来做一些额外的工作。
谢谢!
【问题讨论】:
即使实体不脏,我如何强制 Hibernate 更新实体实例?我正在使用 Hibernate 3.3.2 GA、Hibernate Annotations 和 Hibernate EntityManager btw。我真的希望 Hibernate 执行通用的 UPDATE 语句,即使实体上的属性没有更改。
我需要这个,因为当应用程序第一次运行时,一些事件监听器需要被调用来做一些额外的工作。
谢谢!
【问题讨论】:
好的-我自己找到了。这就是诀窍:
Session session = (Session)entityManager.getDelegate();
session.evict(entity);
session.update(entity);
【讨论】:
对于瞬态,你可以检查
if(session.contains(entity)) {
session.evict(entity);
}
session.update(entity);
【讨论】:
session.evict(entity);
session.update(entity);
好技巧,但在将其放入一些自动化代码之前要注意瞬态对象。对于瞬态,我有 StaleStateObjectException
【讨论】:
尝试用于 EJB 3.0 实体的 em.flush(),它也使用类似于 Hibernate 3.2.2 GA 的 JPA。如果不能正常工作,请在事务中使用flush。
【讨论】: