我想要一个与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
答案 0 :(得分:0)
在Hibernate 3.x中
您有一个名为Listeners的选项。您可以配置Post-Commit。您可以接收添加,修改和删除的事件。在添加的事件中,您可以接收添加的对象,在更新的事件中,您可以接收更新的道具名称,旧的&新的价值观。在“已删除的事件”中,您可以接收已删除的对象。
答案 1 :(得分:0)
看看HibernateInterceptor,here是一个如何实现的例子。根据您的要求,有趣的方法是onFlushDirty(Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types)
。更新实体时会调用此方法,您可以previousState
和currentState
进行比较以查看是否已更改。对于非平凡的字段,多对多映射等,它可能会有点复杂,但它都是可管理的。