@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 应用于整个类(class),我相信这只是说类(class)中的所有关系不要审核另一端。这让我很困惑,因为我错误地使用了这个注释来表示不审计下面的实体,这不是它的意思。如果您不希望对实体进行审计,则根本不要在实体类上添加 Audit 注释。在引用实体的其他已审计实体上,您必须对关系字段使用 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/值)。
哦,是的-文档没有说明如果您同时使用两者会发生什么(不确定哪个具有优先级),但我不认为在给定字段上同时使用两者。使用其中一种。
关于java - Hibernate EnVers 中的@NotAudited 和 RelationTargetAuditMode.NOT_AUDITED 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5661682/