Hibernate EnVers中的@NotAudited和RelationTargetAuditMode.NOT_AUDITED有什么区别?

|
@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 /值)。 哦,是的-文档没有说明如果您同时使用两者(不确定哪一个具有优先权)会发生什么,但是我不认为打算在给定的字段上同时使用两者。使用一个或另一个。     
审计目标实体及其关系是两件事。因此,这取决于您的需求。从Hibernate Envers-简易实体审核文档:   如果您要审核不审核目标实体的关系(例如,像字典一样的实体就是这种情况,它们无需更改且不必审核),只需用@注释它已审核(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)。然后,在读取您实体的历史版本时,该关系将始终指向与“当前”相关的实体。     
@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
仅具有一种用法:当您拥有拥有与未审核实体的关系的已审核实体,并且您想要在审核数据中获得有关未审核实体ID的信息。假设
CustomerBooking
已通过审核,而酒店等级未通过审核。您在“酒店”字段中有两种选择:
@NotAudited
(在这种情况下,您将完全不会在历史数据中获得关于酒店的信息)或
@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
,在这种情况下,您将始终拥有审计数据中最新的酒店状态。 请注意,如果对酒店进行了审核,则“ 5”将被忽略(您将拥有酒店的历史数据)。
@NotAudited
表示\“我只是不在乎历史数据中的该字段\”(不会保存,关系将为空,在查看有关looking2ѭ的历史数据时您不会看到它)     

要回复问题请先登录注册