Hibernate envers: RelationTargetAuditMode.NOT_AUDITED vs @No



我尝试审核一个实体,但我不想审核它的关系。如果我将@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED(放在@ManyToOne关系中,这就可以了,我没有任何例外,但是当我尝试在定义了参数映射的@onetomany中使用相同的注释时,我有一个例外,说我必须审计另一个实体。

例:

@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>();
...
}

当您使用 @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED( 时,您告诉休眠不是审核此实体,而是审核关系,因此休眠将保存引用实体的 ID。这就是为什么宠物必须是一个@Audited实体。

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

检查这个 Hibernate EnVers 中的 @NotAudited 和 RelationTargetAuditMode.NOT_AUDITED 有什么区别?

好吧,我认为您在这里有两种选择:

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

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

希望对您有所帮助!

相关内容

  • 没有找到相关文章

最新更新