即使实体不脏,我如何强制Hibernate更新实体实例?我正在使用Hibernate 3.3.2 GA,Hibernate Annotations和Hibernate EntityManager btw。我真的希望Hibernate执行通用的UPDATE语句,即使实体上没有属性发生了变化。
我需要这个,因为当应用程序第一次运行时,需要调用某些事件侦听器来执行一些额外的工作。
谢谢!
答案 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。