2012-05-22 60 views
2

我有兩個審計實體A和B.實體A保存實體B的集合(註釋爲一對多關係)。當向數據庫中插入一個新的A實例時,A和B的所有行都處於相同的修訂版本(假設版本1)。然後,A上的更新隻影響實體B的實例(級聯類型是合併)。因此,在更新之後,實體A仍處於修訂版本1,而B的實體處於修訂版本2(審計表中的新MOD條目)。Hibernate Envers:跟蹤OneToMany關係擁有方的修訂

問題是當我檢索A的所有版本時,我期望得到2個版本的回報:一個用於創建,一個用於B的擁有集合的修改。 我可以得到這種行爲ManyToMany的,但我不能以OneToMany關係相同的方式得到它。

(我使用Hibernate的3.6.10決賽)

+0

與http://stackoverflow.com/questions/10529982/how-to-retrieve-the-audited-revision-of-relations有關 – Jean

回答

0

我通過我的等效你一個實體的加入一個隱藏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.