2014-02-24 59 views
1

我想创建一个简单的更改日志,用于插入,删除和更改我的表。MergeEventListener中的休眠原始状态

我使用hibernate的HibernateEventListener类以及SaveOrUpdateEventListener和DeleteEventListener。

这对保存和删除非常有用。我想显示新旧状态的变化。所以我遵循相同的模式并创建了一个MergeEventListener。

我的问题是原始值始终为空。我尝试了一个PreUpdateListener并得到了相同的结果。

根据hibernate文档,原始对象将被分离为null的对象。

  1. 打开一个会话中获取对象
  2. 将对象变成一种形式支持bean
  3. 显示的形式提供给用户:

    我的目标总是会根据当前的架构是分离

  4. 在保存或更新点击
  5. 打开新的会话和更新对象

我想知道是否有任何方法可以获得对象的预更新状态。在合并或preupdate事件发生之前,我的分离对象在控制器中更新。

任何想法或提示,将不胜感激。

谢谢

回答

0

我能解决使用PreUpdateEventListener这个问题。

我看着我的Hibernate Dao对象,特别是更新调用。我正在使用更新,这将被分离,并在oldState属性中有null。

我将调用切换到合并,现在始终填充oldState属性。

0

如果您的数据库支持触发器,那么这可以在触发器中实现。

如果发生触发,会话没有问题 - 您可以随时更新OLD和NEW值。

维基百科条目提供有关解决方案的更多细节:http://en.wikipedia.org/wiki/Log_trigger