【发布时间】:2011-04-26 13:12:30
【问题描述】:
我记录了对某些实体的所有更改的历史记录,并且即将实现类似于Envers 的机制来自动处理这个问题。我的问题是是否使用Hibernate interceptors or their event system?
拦截器似乎更简单一些,可以满足我的所有需求。 Hibernate 自己的文档建议使用拦截器来“跟踪审计信息”。但是他们的审计信息不在每个实体的配套表中,Envers 使用我想象的事件系统是有原因的。
我正在使用 Spring 3.0 和 Hibernate 3.5(最新版本)。
更新:数据库触发器不适用于这种情况。我很想听听关于休眠拦截器与审计跟踪/更改历史的事件的想法。
【问题讨论】:
-
数据库触发器将是我的首选方法。比使用 Hibernate 的拦截器更简单。
-
DB 触发器在我的应用中并不容易。我需要在每个审计条目中记录额外的信息,包括还原到的更改、每次更改所基于的更改等,以及处理集合的级联机制。
-
@skaffman:触发器将逻辑移动到数据库层。使用 ORM 有助于我们将逻辑保留在应用层中它所属的位置。
-
@cherouvim:嗯,这是一种观点。我认为审计表是关于数据完整性,而不是业务逻辑,并且确实属于数据库。
-
我会覆盖 EmptyInterceptor。它简单易用。 IMO 最好的事情是 AfterTransactionComplete-Method。使用其他方法收集更改,并在 AfterTxComplete 中检查 Tx-State 并在成功后保留您的 Audit-Logs,然后再 Interceptor-Reset。
标签: hibernate spring interceptor audit-trail hibernate-envers