0

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

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

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

我可以用 Spring Jpa-Envers 实现这一点吗?

我尝试连接 Hibernate 拦截器,后来意识到我只能从拦截器中修改实体字段,除此之外别无他法。

我可以轻松地添加一个服务层来实现这一点,但听起来它不属于服务,因为它是一个横切关注点。

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

很感激你的想法。

4

1 回答 1

0

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

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

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

于 2014-09-04T14:18:35.333 回答