关系发生变化时触发休眠(前/后)更新事件

时间:2015-01-26 19:45:22

标签: hibernate orm coldfusion coldfusion-10

我已经实现了Hibernate事件的前/后事件监听器,但有一点我无法克服。我有一个Departments实体,它与Centers实体之间存在多对多关系。将新中心分配给部门时,我只需调用:

oDepartment.addCenter(oCenter);
entitySave(oDepartment);

当发生这种情况时,我希望Hibernate会在我修改实体后触发preUpdate和postUpdate事件。但是,除非列属性也更新,否则它永远不会被触发。仅更新关系属性似乎不会触发更新事件。

通过当前的Hibernate会话,我似乎找不到任何可以让我设置某种触发这些事件的标志。

关于如何解决这些事件的想法?

2 个答案:

答案 0 :(得分:3)

当更改集合时,Hibernate不会触发pre / postUpdate事件。 相反它会触发

  • preCollectionUpdate / preCollectionRemove / preCollectionRecreate
  • postCollectionUpdate / postCollectionRemove / postCollectionRecreate。

这是一个已知的旧错误,您可以查看HHH-2616here

要么实现这些侦听器,要么作为变通方法,可以强制调用postUpdate来更改该实体上的另一个字段。

答案 1 :(得分:0)

触发侦听器的一种方法是在实体上添加@javax.persistence.Version字段。更多信息请访问:https://stackoverflow.com/a/17073342/12039