我是Hibernate(4.2)+ Spring组合的真正初学者,负责处理一个子应用程序,使用这些子应用程序来管理管理员门户中的某些CRUD管理,所以我可能会迷失在一个非常基本的步骤
我已将Hibernate-Envers加载到项目中,以对特定的@Entity字段执行审计日志记录。将@Audited添加到它后,Envers按预期工作,将数据添加到_aud表中。
我的目标是向管理员显示此实体的所有修订列表。我不确定应该怎么做。
到目前为止我尝试过的是......
从envers * _aud表中收集数据以向网页上的最终用户显示这些数据的首选结构是什么?
答案 0 :(得分:1)
创建一个新的Repository类,我想用它将使用AuditReader通过一些新的Service提供所有修订的列表。但是,如果没有为History对象本身添加新实体,我就无法完成这项工作 - 我觉得这可能不是可行的方法。
让我们假设我们有一些非常愚蠢的基本实体:
@Entity
@Audited
public class BasicEntity {
@Id
@GeneratedValue
private Integer id;
private String name;
...
}
您应该能够构建两个存储库/ dao组件,这两个组件在此处都使用BasicEntity
作为实体类型,但两者在内部对这些实例的操作方式完全不同。
您的业务存储库组件会注入Session
或EntityManager
,您可以使用它来操作调用#persist
,#merge
等的这些实例。
您的审计存储库组件也会注入Session
或EntityManager
,但会使用它来构造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);
}