Hibernate PrePersist方法无法在JPA中保存修改后的值

Hibernate PrePersist方法无法在JPA中保存修改后的值,hibernate,jpa,Hibernate,Jpa,有人能解释一下为什么下面的方法不起作用吗 我有一个域对象,它有几个包含复杂POJO的瞬态字段。保存comain对象时,我希望将这些对象序列化为XML(使用Xstream),并将它们存储到数据库中的PersistentMap中 因此,我在我的域对象上创建了一个@PrePersist/@PreUpdate方法,并在这些方法中序列化这些值,并将它们放入域对象中的持久映射中。调用persist时,我可以看到值被序列化,映射被更新,但保存的实际值是原始值,而不是更新的值 我的假设是,由于更改发生在PreP

有人能解释一下为什么下面的方法不起作用吗

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

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

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

有人能给我一个如何使这项工作的线索吗?除了PrePersist/PreUpdate钩子,还有其他机制可以使用吗

任何指点都将不胜感激


谢谢

如果只更改了瞬时值,Hibernate将不会认为对象已更改,因此不会调用
@PreUpdate

我能够使其工作的唯一方法是实际更改事件的状态

String[] names = event.getPersister().getPropertyNames();
for (int i=0; i < names.length; i++) {
    if ("myProperty".equals(names[i])) {
        event.getState()[i] = getMyProperty();
    }
}
String[]name=event.getPersister().getPropertyNames();
for(int i=0;i
谢谢@Michael,你的回答救了我一天!:-)