-1

我想要一个与审计日志插件 ( http://grails.org/plugin/audit-logging ) 相同但适用于 Java 的系统。

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

这就是我想要的:一张桌子:

date_event、class_name、old_value、new_value、actor、persited_object_id
2014-12-18;人; 托尼;约翰; 行政; 5

总而言之,我想回答这个问题:谁?改变了什么?什么时候 ?

谢谢

4

2 回答 2

0

在休眠 3.x 中

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

于 2014-12-19T11:18:14.097 回答
0

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

于 2014-12-19T11:19:02.083 回答