【问题标题】:Hibernate envers: RelationTargetAuditMode.NOT_AUDITED vs @NotAudited休眠环境:RelationTargetAuditMode.NOT_AUDITED 与 @NotAudited
【发布时间】:2016-05-27 13:54:00
【问题描述】:

我尝试审计一个实体,但我不想审计它的关系。如果我将@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) 放在@ManyToOne 关系中,这可以工作并且我没有任何异常,但是当我尝试在@onetomany 中使用相同的注释并定义了param mappedby 时,我有一个表示我必须审计其他实体的例外情况。

例子:

@Table(name = "OWNERS")
@Entity
@EntityListeners(AuditingEntityListener.class)
@Audited
public class Owner {
...
  @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
  @ManyToOne(fetch=FetchType.LAZY)
  private User user;
...
  @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
  @OneToMany(cascade = CascadeType.ALL, mappedBy = "owner" )
  private Set<Pet> pets = new HashSet<Pet>();
...
}

【问题讨论】:

    标签: java hibernate audit hibernate-envers


    【解决方案1】:

    当您使用 @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) 时,您是在告诉 hibernate 不要审计此实体,而是审计关系,因此您的 hibernate 将保存引用实体的 id。这就是 Pet 必须是 @Audited 实体的原因。

    如果您根本不想存储关系,则需要使用@NotAudited

    查看Whats the difference between @NotAudited and RelationTargetAuditMode.NOT_AUDITED in Hibernate EnVers?

    【讨论】:

      【解决方案2】:

      嗯,我认为你有两个选择:

      1. 实际审计实体Pet,如果适用的话;

      2. 使用注释@NotAudited 代替@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)。想一想,Owner 的审计表不必保留 Pet 的关联。如果是,请使用选项 1。

      希望对你有帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-05
        • 2018-06-29
        • 1970-01-01
        • 2016-03-31
        • 1970-01-01
        • 2012-12-06
        • 2011-10-10
        相关资源
        最近更新 更多