我正在使用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
上的值,以便将其包含在用例的修订版中。