【问题标题】:PrePersist method fails to save modified values in JPAPrePersist 方法无法在 JPA 中保存修改后的值
【发布时间】:2012-08-02 22:07:42
【问题描述】:

有人可以解释一下为什么以下方法不起作用吗?

我有一个域对象,其中包含多个包含复杂 POJO 的瞬态字段。保存 comain 对象后,我想将这些对象序列化为 XML(使用 Xstream),并将它们存储到我的数据库中的 PersistentMap 中。

所以我在我的域对象上创建了一个@PrePersist/@PreUpdate 方法,并在这些方法中序列化值并将它们放入域对象的持久映射中。当调用persist时,我可以看到值被序列化,地图被更新,但实际保存的值是原始值,而不是更新后的值。

我的假设是,由于更改发生在 PrePersist/PreUpdate 方法中,底层持久性提供程序(在我的情况下为 Hibernate 3)在调用 PrePersist/PreUpdate 方法之前确定域中更改的字段,因此当实际保存完成后,原始值永远不会更新。

谁能告诉我如何使这项工作的线索?除了 PrePersist/PreUpdate 挂钩之外,我还可以使用其他机制吗?

任何指针将不胜感激。

谢谢

【问题讨论】:

    标签: hibernate jpa


    【解决方案1】:

    如果只有瞬态值发生了变化,Hibernate 不会认为对象发生了变化,因此不会调用@PreUpdate

    【讨论】:

    • 谢谢@Michael,你的回答拯救了我的一天! :-)
    【解决方案2】:

    我能够让它工作的唯一方法是实际更改事件的状态。

    String[] names = event.getPersister().getPropertyNames();
    for (int i=0; i < names.length; i++) {
        if ("myProperty".equals(names[i])) {
            event.getState()[i] = getMyProperty();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-13
      • 1970-01-01
      • 2012-10-03
      • 1970-01-01
      • 2021-05-06
      • 2019-03-12
      • 1970-01-01
      • 2011-10-08
      相关资源
      最近更新 更多