使用JPA Envers进行Bi时态审计数据

时间:2014-09-04 07:47:24

标签: hibernate-envers spring-data-envers

我们有一个应用程序使用双时态数据跟踪所有实体更改。每个实体都有:

@Embeddable 
public class AuditInfo {
    private Date effectiveFrom;
    private Date effectiveTo;
    private Date asOf;
    private Boolean isCurrent;
}

但是,在更新实体时,我们要插入一条新记录并使用isCurrent = false更新旧记录,并使用当前日期时间更新effectiveTo日期。

我能用Spring Jpa-Envers实现这个目标吗?

我尝试连接Hibernate拦截器,后来意识到我只能从拦截器中修改实体字段,除此之外不能做任何事情。

我可以轻松添加一个可以实现此目的的服务层,但听起来它不属于服务,因为它是一个跨领域的关注点。

我们正在使用的另一个是拥有自定义存储库并覆盖save()方法。

非常感谢你的想法。

1 个答案:

答案 0 :(得分:0)

Envers中的旧版本实体存储在单独的表中。因此标记为isCurrent没有意义,因为主表中的标记是当前版本。如果更改了effectiveTo / effectiveFrom字段,则会将新修订插入审计表。

现在,如果具有不同生效日期的实体具有不同的身份,那么您应该将其简单地建模为单独的实体,而只是JPA。

如果身份保持不变,那么对于Envers来说这是一个很好的用例。