繁体   English   中英

Hibernate envers:RelationTargetAuditMode.NOT_AUDITED vs @NotAudited

[英]Hibernate envers: RelationTargetAuditMode.NOT_AUDITED vs @NotAudited

我尝试审核一个实体,但我不想审核它的关系。 如果我在@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>();
...
}

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

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

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

好吧,我认为你有两个选择:

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

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

希望能帮助到你!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM