在Hibernate中强制更新

时间:2010-03-03 09:36:55

标签: java hibernate

即使实体脏,我如何强制Hibernate更新实体实例?我正在使用Hibernate 3.3.2 GA,Hibernate Annotations和Hibernate EntityManager btw。我真的希望Hibernate执行通用的UPDATE语句,即使实体上没有属性发生了变化。

我需要这个,因为当应用程序第一次运行时,需要调用某些事件侦听器来执行一些额外的工作。

谢谢!

4 个答案:

答案 0 :(得分:11)

好的 - 自己找到了。这就是诀窍:

Session session = (Session)entityManager.getDelegate();  
session.evict(entity);  
session.update(entity);

答案 1 :(得分:4)

对于瞬变,您可以检查

if(session.contains(entity)) {
  session.evict(entity);
}
session.update(entity);

答案 2 :(得分:2)

session.evict(entity);  
session.update(entity);

好的技巧,但在将其放入某些自动化代码之前要注意瞬态对象。对于瞬态,我有StaleStateObjectException

答案 3 :(得分:0)

尝试使用em.flush(),它用于EJB 3.0实体,它也使用类似于Hibernate 3.2.2 GA的JPA。如果它不能正常工作,请在事务中使用flush。