在Crud(更新...)事件中记录值的变化(谁,何时,旧值,新值......)

时间:2014-12-19 11:03:08

标签: java hibernate hibernate-envers audit-logging

我想要一个与Audit Logging Plugin(http://grails.org/plugin/audit-logging)相同但与Java相同的系统。

Hibernate envers允许存储每个版本的所有数据。它不知道哪些数据发生了变化。 我只会存储更改的值。在我的情况下,存储所有值都是无用的。

这是我希望的: 表格包含:

date_event,class_name,old_value,new_value,actor,persited_object_id
情节中字;人;托尼;约翰;管理; 5

总结一下,我想回答一个问题:谁?改变了什么?什么时候 ?

Thx

2 个答案:

答案 0 :(得分:0)

在Hibernate 3.x中

您有一个名为Listeners的选项。您可以配置Post-Commit。您可以接收添加,修改和删除的事件。在添加的事件中,您可以接收添加的对象,在更新的事件中,您可以接收更新的道具名称,旧的&新的价值观。在“已删除的事件”中,您可以接收已删除的对象。

答案 1 :(得分:0)

看看HibernateInterceptorhere是一个如何实现的例子。根据您的要求,有趣的方法是onFlushDirty(Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types)。更新实体时会调用此方法,您可以previousStatecurrentState进行比较以查看是否已更改。对于非平凡的字段,多对多映射等,它可能会有点复杂,但它都是可管理的。