我有两个审计实体,A和B。实体A持有实体B的集合(注释为一对多关系)。当将A的新实例插入数据库时,A和B的所有行都在同一个修订版(假设修订版1)。然后,A上有一个更新,它只影响实体B的实例(级联类型是合并)。所以更新后,实体A仍然处于修订版1,而B的实体处于修订版2(审计表中的新MOD条目)。
问题是当我检索A的所有修订时,我希望得到2个修订作为回报:一个用于创建,一个用于修改B的所属集合。我可以在ManyTo多的情况下得到这种行为,但我不能让它以同样的方式与OneTo多关系一起工作。
(我正在使用Hibernate 3.6.10-Final)
我解决了我的问题,在我的等效于你的A实体上添加了一个隐藏的lastUpdate日期字段。
@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。