2014-09-02 99 views
2

我使用4.3.6休眠和envers。休眠envers一對一的關係,不是雙方審計

我有2個實體A和B,A是主實體和B是A

的子節它們是一對一的和雙向的。

雙方都有@Audited,還有當我保存A 3的情況發生了:

  1. 保存A,A和B都被修改。這兩個版本都會有一個新的版本號。
  2. 保存A,只有A被修改。 A將有一個新的修訂版。
  3. 保存A,只有B被修改。將有一個新的修訂版B.(我不想這)

我會一直保存實體A和級聯B來更新。如何在場景3中修改實體A?非常感謝!!!

的數據模式,我的模式是根據這個帖子的答案配置: 我的數據模式:

@Entity 
@Audited 
public class B implements Serializable { 

    .... 

    //bi-directional one-to-one association to A 
    @MapsId 
    @OneToOne(mappedBy="b", cascade=CascadeType.ALL) 
    @JoinColumn(name="A_ID") 
    private A a; 

    } 

@Entity 
@Audited 
@Table(name="A") 
public class A implements Serializable { 

... 

    //bi-directional one-to-one association to B 
    @OneToOne(cascade=CascadeType.ALL) 
    @PrimaryKeyJoinColumn 
    private B b; 

當我保存堅持實體A(A沒有被修改和B被修改),

Hibernate generated sql 

Hibernate: update A set ... 

Hibernate: update B set ... 

Hibernate: update C set ... 

Hibernate: insert into RevEntity (CREATE_DATE, timestamp, username, id) values (?, ?, ?, ?) 

Hibernate: insert into B_AUD ... 
+0

你可以通過編輯你的問題發佈你的實際數據模式嗎?任何相關的代碼將幫助SO成員更好地回答您的問題,謝謝。 – m4rtin 2014-09-02 09:48:08

回答

0

不幸的是,當您直接修改B時,無法強制Envers也修改A。您必須在業務/持久性代碼中觸發該要求才能更改A上的值,以便將其包含在您的用例的修訂中。