2017-10-17 95 views
0

我是Hibernate(4.2)+ Spring组合的真正初学者,负责处理子应用程序,它使用这些子程序在管理员门户中实现一些CRUD管理,因此我可能在非常基本的步骤中迷路了。我应该如何可视化Envers收集的数据?

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

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

什么我试过到目前为止..

  1. 创建我想象中会使用 AuditReader通过一些新的 服务提供的所有修订的列表中的新库类。但是,如果不为历史记录对象本身添加新的实体,我就无法完成这项工作 - 而且我觉得这可能不是要走的路。
  2. 尝试在实体的现有控制器中使用AuditReader。对于AuditReader的创建,我需要一个sessionFactory,我试图自动装入控制器,但事实证明这不是正确的,因为自动装配失败了。

什么是从envers收集数据* _aud表向他们展示在网页上最终用户的首选结构?

回答

1

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

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

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

您应该能够构建都使用BasicEntity为实体型这里有两个存储库/ DAO组件,但两者内部在这些情况下运作非常不同。

您的企业资源库组件将有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); 
}