0

假设我有两个实体,如下所示,我想跟踪更改。

@Audited
public class Table {

    private String name;

    @ManyToOne(fetch = FetchType.LAZY)
    private Department department;

    //getters and setter
}

@Audited
public class Department {

    private String name;

    //getter and setter
} 

在使用注释实体后,@Audited我还有两个用于使用 table_aud 和 department_aud 进行版本控制的 dbTable。

假设我有一个表对象,它指向 id=1 和 name="Department1" 的部门。然后我对表名进行了更改,例如 table1、table2、table3、table4 等。我在 table_aud 中看到了修订。当我查询修订版(特别是最新修订版)时,我得到指向 id=1 的部门但针对当前版本的部门的 Table 对象。我的意思是让我们说以前版本的 Table 看起来像

table.getId() -> 1
table.getName() -> table3
table.getDepartment().getId() -> 2
table.getDepartment().getName() -> Department1

现在我将部门的名称更改为 Department2。并再次查找 Table 的最新版本,我得到了

table.getId() -> 1
table.getName() -> table3
table.getDepartment().getId() -> 2
table.getDepartment().getName() -> Department2

当我查询 Table 的最新版本时,Department 总是指向 Department 的当前版本。但是,我希望它在更改之前指向部门的快照或状态。有没有办法通过 Envers 实现这一目标?

4

1 回答 1

0

如果您查询最新版本,您将获得最新数据。如果您查询历史修订,您将获得历史数据——这就是审计的全部思想。修订捕获一致的数据库状态,每个修订对应一个提交。

于 2013-10-02T06:47:10.037 回答