在根本不希望审核值/关系时,对字段使用 NotAudited。我相信您可以在有或没有关系的字段上使用它,例如OneToMany,ManyToMany或只是专栏。如果要审核值,但不希望审核关系另一端的实体,请使用关系字段上的RelationTargetAuditMode.NOT_AUDITED。例如,您希望审核 ID/键值,但不审核相关表。
你还可以将 RelationTargetAuditMode 应用于整个类,我相信这只是说,对于类中的所有关系,不要审核另一端。这让我感到困惑,因为我错误地使用此注释来表示不要审核下面的实体,这不是它的意思。只是如果不希望对实体类进行审核,则根本不对实体类进行审核批注。在引用该实体的其他已审核实体上,必须使用“未审核”或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 /值)。
哦,是的 - 文档不会说如果你同时使用两者会发生什么(不确定哪一个有优先级),但我不认为在给定的字段上同时使用两者是有意的。使用其中之一。