对于Java Web应用程序(Struts / Spring / Hibernate),Hibernate事件监听器是审计日志记录的新功能。
当需要捕获一些额外信息时,例如更新实体的用户,与预览实体属性相比更改的实体属性的详细信息等,是否有可以遵循的最佳实践模式?
示例:对于用户相关信息,如果每个实体都维护更改日志属性(UpdatedBy,CreatedBy),则实体本身可以提供信息。
为了比较哪些实体属性与DB中先前的实体状态相比发生了变化,除了在插入之前比较所有实体属性之外没有办法吗? (这似乎是一个多余的措施)
答案 0 :(得分:3)
Hibernate Reference documentation提供了一个AuditInterceptor作为实现Hibernate Interceptor的示例。
您可以扩展EmptyInterceptor并覆盖方法boolean onFlushDirty(Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types)
,该方法具有对当前对象及其ID的引用,其当前和之前状态的字段内容以及所有字段名称和类型
使用Spring驱动的应用程序,您可以在配置Hibernate SessionFactory的Spring应用程序上下文中配置这些拦截器。
答案 1 :(得分:3)
如果您需要专门用于审核,则无需重新发明轮子 - 请查看JBoss Envers