Hibernate envers:RelationTargetAuditMode.NOT_AUDITED vs @NotAudited

时间:2016-02-16 10:27:35

标签: java hibernate audit hibernate-envers

我尝试审核实体,但我不想审核其关系。如果我在@ManyToOne关系中放置@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED),这是有效的,我没有任何异常,但是当我尝试在@onetomany中使用与定义的param映射相同的注释时,我有一个例外,我说我必须审核另一个实体。

示例:

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

2 个答案:

答案 0 :(得分:5)

当你使用@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)时,你告诉hibernate不要审计这个实体但审计关系,这样你就可以保存被引用实体的id。这就是为什么宠物必须是@Audited实体。

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

选中此Whats the difference between @NotAudited and RelationTargetAuditMode.NOT_AUDITED in Hibernate EnVers?

答案 1 :(得分:0)

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

  1. 实际审核实体Pet(如果适用);

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

  3. 希望它有所帮助!