Java Hibernate中的强制更新

Java Hibernate中的强制更新,java,hibernate,Java,Hibernate,如何强制Hibernate更新实体实例,即使实体不是脏的?我正在使用Hibernate 3.3.2 GA、Hibernate注释和Hibernate EntityManager顺便说一句。我真的希望Hibernate执行通用更新语句,即使实体上的属性没有更改 我之所以需要它,是因为当应用程序第一次运行时,需要调用一些事件侦听器来执行一些额外的工作 谢谢 好的-我自己找到的。这就是诀窍: Session session = (Session)entityManager.getDelegate();

如何强制Hibernate更新实体实例,即使实体不是脏的?我正在使用Hibernate 3.3.2 GA、Hibernate注释和Hibernate EntityManager顺便说一句。我真的希望Hibernate执行通用更新语句,即使实体上的属性没有更改

我之所以需要它,是因为当应用程序第一次运行时,需要调用一些事件侦听器来执行一些额外的工作


谢谢

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

Session session = (Session)entityManager.getDelegate();  
session.evict(entity);  
session.update(entity);
尝试em.flush(),它用于EJB3.0实体,也使用类似于Hibernate 3.2.2 GA的JPA。如果它不能正常工作,请在事务中使用flush

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

这是一个很好的技巧,但在将其放入一些自动化代码之前,请注意瞬态对象。对于瞬态,我有StaleStateObjectException

对于瞬态,您可以检查

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

+1我以前听说过这个技巧,但想不起来了。这个技巧很好,但我只是尝试了一下,值得一提的是,如果您也有兴趣使用这个提交“entity.childEntity”,它不会——它会破坏依赖关系树。Flush强制Hibernate将内存中的更改与数据库同步。但是如果Hibernate不认为这个实体是脏的,那么它至今不会刷新任何东西。我记得。YEP—FrHuffE()在这里没有任何帮助,因为没有做任何修改。