我有两个经审计的实体,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)
答案 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.