【问题标题】:Getting a relation at a previous revision在以前的版本中获取关系
【发布时间】:2013-10-01 07:00:39
【问题描述】:

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

@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 实现这一目标?

【问题讨论】:

    标签: java hibernate hibernate-envers


    【解决方案1】:

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

    【讨论】:

    • 是的,这是真的。我的问题是,当我查询历史数据时,我得到了它,但关系除外。关系不是历史的。对于我给出的表部门示例的情况,当我查询表实体的历史版本时,我没有得到部门的历史版本。历史表实体始终指向部门实体的当前版本。我就是这个意思。
    • 嗯,这似乎很奇怪,所有关系都应该在您检索原始对象的同一修订版中检索。您确定您使用的是正确的修订号,并且该关系已被审计?
    猜你喜欢
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 2019-04-24
    • 1970-01-01
    • 1970-01-01
    • 2010-12-06
    • 2017-04-02
    相关资源
    最近更新 更多