我正在使用4.3.6休眠和启用。

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

它们是一对一和双向的。

它们都是@Audited,当我保存A时会发生3种情况:


保存A,同时修改A和B。双方将共享一个新的修订号。
保存A,仅修改A。将有一个针对A的新修订版。
保存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 ...

最佳答案

不幸的是,当您直接修改A时,没有办法强制Envers也修改B。您必须在业务/持久性代码中触发该要求才能更改A上的值,以便将其包含在用例的修订版中。

09-27 02:33