【问题标题】:Hibernate envers one-to-one relationship not both side auditedHibernate envers 一对一关系而不是双方审核
【发布时间】:2014-09-02 09:43:39
【问题描述】:

我使用的是 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 会有一个新的修订版。(我不想要这个)

我将始终保存实体 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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-08
    • 2015-01-21
    • 2017-01-06
    • 2019-07-27
    • 2023-03-24
    • 2018-01-13
    • 2013-08-27
    • 1970-01-01
    相关资源
    最近更新 更多