Hibernate强调一对一的关系,而不是双方审计

时间:2014-09-02 09:43:39

标签: java orm mapping one-to-one hibernate-envers

我正在使用4.3.6 hibernate和envers。

我有2个实体A和B.A是主要实体,B是A的子部分。

它们是一对一和双向的。

他们都是@Audited,当我保存A:

时会发生3种情况
  1. 保存A,A和B都被修改。两者都会共享一个新的修订号。
  2. 保存A,仅修改A.将有一个新的A版本。
  3. 保存A,仅修改B. B将有一个新版本。(我不想要这个)
  4. 我将始终保存实体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 ...
    

1 个答案:

答案 0 :(得分:0)

很遗憾,当您直接修改A时,无法强制Envers修改B。您必须在业务/持久性代码中触发该要求,以更改A上的值,以便它包含在您的用例的修订中。