我尝试审核一个实体,但我不想审核它的关系。如果我在@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
好吧,我认为你有两个选择:
Pet
,如果适用的话;@NotAudited
而不是@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
。想想看,Owner
的审计表不必坚持与Pet
相关联。如果是,请使用选项1。希望能帮助到你!