Hibernate Envers:跟踪OneToMany关系所属方面的修订

时间:2012-05-22 07:51:55

标签: hibernate-envers

我有两个经审计的实体,A和B.实体A包含实体B的集合(注释为一对多关系)。将新的A实例插入数据库时​​,A和B的所有行都处于同一版本(假设修订版1)。然后,A上有一个更新,它只影响实体B的实例(级联类型是合并)。因此,在更新之后,实体A仍处于修订版1,而B的实体处于修订版2(审计表中的新MOD条目)。

问题是,当我检索到A的所有修订版时,我希望得到2个修订版本:一个用于创建,一个用于修改B的拥有集合。 在ManyToMany的情况下,我可以得到这种行为,但是我无法使用OneToMany关系以相同的方式工作。

(我正在使用Hibernate 3.6.10-Final)

1 个答案:

答案 0 :(得分:0)

我通过在我的A实体上添加一个隐藏的lastUpdated日期字段来解决我的问题。

@Entity
public class A {
    private Date lastModified;
    @OneToMany(mappedBy = "a", cascade = CascadeType.ALL )
    private List<B> blist;
    public void touch(){
        lastModified=new Date();
    }
}

在相关实体(如B字段)中,我添加了以下内容:

public class B {
    @ManyToOne
    private A a; 

    @PreUpdate
    public void ensureParentUpdated(){
        if(a!=null){
            a.touch();
        }
    }
}

这确保每当将修订添加到B时,都会将修订添加到A.