如何通过hibernate envers审计具有一对一关系的两个表?

How to Audit two tables with one-to-one relation through hibernate envers?

所以我有两个实体 类、SubscriptionMailDetail。它们之间是一对一的关系。 这是 类 -

Subscription.class-

@Data
@Entity
@AllArgsConstructor
@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
public class Subscription {

@Id
@GeneratedValue(strategy =`enter code here` GenerationType.SEQUENCE, generator = "subscription_subscription_id_seq")
@SequenceGenerator(initialValue = 1, allocationSize enter code here= 1, name = "subscription_subscription_id_seq", sequenceName = "subscription_subscription_id_seq")
@Column
private Long subscriptionId;

@Column
private String template;

@Column
private String fileFormat;

@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "mail_id", referencedColumnName = "mail_id")
private MailDetail mailDetail;

}

MailDetail.class -

@Data
@Entity
@Audited
public class MailDetail {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "mail_detail_mail_id_seq")
    @SequenceGenerator(initialValue = 1, allocationSize = 1, name = "mail_detail_mail_id_seq", sequenceName = "mail_detail_mail_id_seq")
    @Column
    private Long mailId;

    @Column
    private String emailId;
}

因此这会创建两个审计 tables,subscription_audmail_detail_aud。 mail_detail table 中的 Creation/Updates 仅通过订阅存储库完成。所以我的要求是,每当 mail_details table 的字段发生变化时,我需要在 subscription_aud 中有一个审计条目。或者基本上我希望 mail_detail table 的变化被视为订阅 table.

的变化

我正在使用 hibernate envers 进行审计。我怎样才能做到这一点?

不幸的是,与 Envers 当前的设计方式不同。

任何 对多 关联,其内容已修改或集合中的元素已更改,默认情况下将为关系的拥有方传播审核更改;然而,甚至可以通过将 org.hibernate.envers.revision_on_collection_change 设置为 false 来禁用它。当禁用此配置设置时,只有元素集合会将更改传播给所有者,因为此类集合中的元素不是实体,因此只能通过拥有实体进行查询。

对于一对一协会,这是一个完全不同的故事。

完成您想要的唯一方法是在拥有 MailDetailSubscription 实例上引入一些列,并在发生此用例时更改该列的值。基于您仅通过聚合根 Subscription 修改 MailDetail 的事实,这应该可行,但我同意它不太理想。