【问题标题】:Force update in Hibernate在 Hibernate 中强制更新
【发布时间】:2010-03-03 09:36:55
【问题描述】:

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

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

谢谢!

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

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

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

    【讨论】:

    • +1 我以前听说过这个技巧,但想不起来了。
    • 巧妙的技巧,但我刚刚尝试过,值得指出的是,如果您也有兴趣提交“entity.childEntity”,它不会——它会破坏依赖关系树。
    【解决方案2】:

    对于瞬态,你可以检查

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

    【讨论】:

      【解决方案3】:
      session.evict(entity);  
      session.update(entity);
      

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • Flush 强制 Hibernate 将内存中的更改与数据库同步。但是如果 Hibernate 不认为实体是脏的,那么它不会刷新我记得的任何东西。
        • 是的 - flush()ing 在这里没有帮助,因为没有进行任何更改
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-09-12
        • 2011-04-30
        • 2019-10-26
        • 2018-12-26
        • 2018-05-08
        • 2019-02-09
        • 2011-06-18
        相关资源
        最近更新 更多