我有两个被审计单位,A和B.实体A持有实体B(注释为一一对多的关系)的集合。 当插入的新实例到数据库中,A和B的所有行同一版本的(假设修订1)。 然后,对A,其只会影响实体B的实例的更新(级联型是合并)。 因此,更新后,实体A仍处于修订版1,而B的实体是在第2次修订(在审核表中的新MOD条目)。
问题是,当我取回的所有修订,我希望得到两个版本的回报:一个用于创建,一个B的集合拥有的修改,我可以在多对多的情况下获得这种行为,但我可以“弄不明白的工作方式相同与一对多的关系。
(我使用Hibernate的3.6.10决赛)
我通过我的等效你一个实体的加入一个隐藏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();
}
}
}
这确保了修订加入A每当修订版将添加到B.
文章来源: Hibernate Envers : track revisions in the owning side of a OneToMany relation