3

我有两个经过审计的实体 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)

4

1 回答 1

2

我通过在相当于您的 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。

于 2012-06-28T11:57:39.187 回答