我应该如何可视化Envers收集的数据?

时间:2017-10-17 13:14:09

标签: hibernate spring-mvc hibernate-envers

我是Hibernate(4.2)+ Spring组合的真正初学者,负责处理一个子应用程序,使用这些子应用程序来管理管理员门户中的某些CRUD管理,所以我可能会迷失在一个非常基本的步骤

我已将Hibernate-Envers加载到项目中,以对特定的@Entity字段执行审计日志记录。将@Audited添加到它后,Envers按预期工作,将数据添加到_aud表中。

我的目标是向管理员显示此实体的所有修订列表。我不确定应该怎么做。

到目前为止我尝试过的是......

  1. 创建一个我想象会使用的新的Repository类 AuditReader通过一些新的提供所有修订的列表 服务。但是,如果不添加新内容,我无法完成这项工作 历史对象本身的实体 - 我觉得这可能是 不是要走的路。
  2. 尝试在现有控制器中为实体使用AuditReader。为了创建一个AuditReader,我需要一个我试图自动装入控制器的sessionFactory,但事实证明这不是正确的,因为自动装配失败了。
  3. 从envers * _aud表中收集数据以向网页上的最终用户显示这些数据的首选结构是什么?

1 个答案:

答案 0 :(得分:1)

  

创建一个新的Repository类,我想用它将使用AuditReader通过一些新的Service提供所有修订的列表。但是,如果没有为History对象本身添加新实体,我就无法完成这项工作 - 我觉得这可能不是可行的方法。

让我们假设我们有一些非常愚蠢的基本实体:

@Entity
@Audited
public class BasicEntity {
  @Id
  @GeneratedValue
  private Integer id;
  private String name;
  ...
}

您应该能够构建两个存储库/ dao组件,这两个组件在此处都使用BasicEntity作为实体类型,但两者在内部对这些实例的操作方式完全不同。

您的业务存储库组件会注入SessionEntityManager,您可以使用它来操作调用#persist#merge等的这些实例。

您的审计存储库组件也会注入SessionEntityManager,但会使用它来构造AuditReader并查询审计表。

@Component
public interface BasicEntityAuditRepository implements AuditRepository<BasicEntity> {

  @PersistenceContext
  private EntityManager entityManager;

  @Override
  public List<BasicEntity> findByRevision(Long id, Number revision) {
    final AuditReader auditReader = AuditReaderFactory.get( entityManager );
    // build whatever query and return the results.
  }

}

public interface AuditRepository<T> {
  List<T> findByRevision(Long id, Number revision);
}