【发布时间】:2014-09-02 09:43:39
【问题描述】:
我使用的是 4.3.6 hibernate 和 envers。
我有 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 ...
【问题讨论】:
-
您可以通过编辑您的问题来发布您的实际数据架构吗?任何相关代码都将帮助 SO 成员更好地回答您的问题,谢谢。
标签: java orm mapping one-to-one hibernate-envers