获得先前版本的关系

时间:2013-10-01 07:00:40

标签: java hibernate hibernate-envers

假设我有两个实体如下,我想跟踪变化。

@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注释实体后,我还有两个dbTables用于使用table_aud和department_aud进行版本控制。

假设我有一个表对象,指向id = 1且name =“Department1”的部门。 然后我对table1,table2,table3,table4等表名进行了更改。我在table_aud中看到了修订版。当我查询修订版(特别是最新修订版)时,我得到的Table对象指向id = 1的部门,但是当前版本的Department。 我的意思是让我们说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实现这个目标?

1 个答案:

答案 0 :(得分:0)

如果查询最新版本,则会获得最新数据。如果您查询历史修订,您将获得历史数据 - 这是审计的整体概念。修订捕获一致的DB状态,每个修订对应一次提交。