【问题标题】:How to Audit two tables with one-to-one relation through hibernate envers?如何通过休眠环境审计两个具有一对一关系的表?
【发布时间】:2019-01-28 17:55:56
【问题描述】:

所以我有两个实体类,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;
}

因此这会创建两个审计表,subscription_audma​​il_detail_aud。 mail_detail 表中的创建/更新仅通过订阅存储库完成。所以我的要求是,每当 mail_details 表的字段发生变化时,我都需要在 subscription_aud 中添加一个审计条目。或者基本上我希望 mail_detail 表的更改被视为订阅表的更改。

我正在使用休眠环境进行审计。我怎样才能做到这一点?

【问题讨论】:

  • @查看MappedSuperClass了解更多详情。
  • 我读过。这有什么帮助?

标签: java spring hibernate jpa hibernate-envers


【解决方案1】:

很遗憾,Envers 目前的设计方式并非如此。

任何 to-many 关联如果其内容被修改或集合中的元素发生更改,默认情况下将为关系的拥有方传播审计更改;然而,这甚至可以通过将org.hibernate.envers.revision_on_collection_change 设置为 false 来禁用。禁用此配置设置后,只有元素集合会将更改传播给所有者,因为此类集合中的元素不是实体,因此只能通过拥有实体进行查询。

对于 to-one 关联,这是一个完全不同的故事。

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

【讨论】:

  • 好的。感谢您的澄清和建议纳罗斯!我发现对于我的用例,我可以不实现此映射。但是了解这个事实是件好事。谢谢!
猜你喜欢
  • 2021-10-24
  • 2017-08-17
  • 2014-03-22
  • 1970-01-01
  • 2021-08-23
  • 2013-04-02
  • 1970-01-01
  • 2012-09-10
相关资源
最近更新 更多