@NotAudited @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) @OneToMany(mappedBy = "booking") @OrderBy("bookingOrder") private List<CustomerBooking> customerBookingList = new LinkedList<CustomerBooking>();
为什么要同时使用?两者都使用还是一个就足够了?
如果您根本不想审核值/关系,请在字段上使用NotAudited。我相信您可以在具有或没有诸如OneToMany,ManyToMany或Column之类的关系的字段上使用它。如果要审核值,请在关系字段上使用RelationTargetAuditMode.NOT_AUDITED,而不要审核关系另一侧的实体。例如,您要审核ID /键值,而不要审核相关表。
您还可以将RelationTargetAuditMode应用于整个类,我认为这只是针对该类中的所有关系不审核另一端。这让我感到困惑,因为我错误地使用了此批注来表示不要审核下面的实体,这不是什么意思。如果您不希望对实体进行审核,则根本不需要在实体类上使用审核注释。在引用该实体的其他审核实体上,您必须对关系字段使用NotAudited或RelationTargetAuditMode.NOT_AUDITED。
官方文档不是关于此主题的好文章(http://docs.jboss.org/hibernate/orm/4.2/devguide/en- US/html/ch15.html),甚至根本没有提到NotAudited。
在过去的项目中,我需要审核一组非常特定的表而不是其他表,因此我需要使用这些注释。我与某些审计实体之间的某些非审计实体具有外键关系。我经常使用RelationTargetAuditMode.NOT_AUDITED注释,以便至少审核外键值/ ID,而不是审核关系另一端的实体。如果没有此批注,则会遇到运行时异常,ENVERS会尝试将未审核实体的审核记录插入到审核表中,并且该表将不存在。我将NotAudited注释用于一些我不需要审核的ManyToMany联接表关系,并且在已审核实体表本身上没有要记录的内容(没有外键ID /值)。
哦,是的-文档没有说明如果您同时使用两者(不确定哪一个具有优先权)会发生什么,但是我不认为打算在给定的字段上同时使用两者。使用一个或另一个。