休眠envers:RelationTargetAuditMode.NOT_AUDITED与@NotAudited

Man*_*uel 3 java audit hibernate hibernate-envers

我尝试审核一个实体,但是我不想审核其关系。如果我将@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)放在@ManyToOne关系中,则此方法有效,我也没有任何例外,但是当我尝试在@onetomany中使用定义了mapbyby参数的相同注释时,我有一个我必须审核另一个实体的例外情况。

例:

@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>();
...
}
Run Code Online (Sandbox Code Playgroud)

Ric*_*ila 5

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

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

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