繁体   English   中英

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

[英]What's the difference between @NotAudited and RelationTargetAuditMode.NOT_AUDITED in Hibernate EnVers?

@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 - Easy Entity Auditing文档:

如果要审计目标实体未被审计的关系(例如,类似字典的实体,不会更改而不必审计),只需使用@Audited注释( targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)。 然后,在读取实体的历史版本时,关系将始终指向“当前”相关实体。

@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)只有一种用法:当您拥有与未审计实体的关系的审计实体,并且您希望审计数据中有关未审计实体的ID的信息。 假设审核了CustomerBooking ,并且未审核酒店类。 您可以选择两种酒店字段: @NotAudited (在这种情况下,您根本不会获得历史数据中的酒店信息)或@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)在这种情况下,您将始终拥有最新的酒店状态。审计数据。 请注意,如果酒店已经过审计,则会忽略RelationTargetAuditMode.NOT_AUDITED (您将获得酒店的历史数据)。 @NotAudited意思是“我只是不关心历史数据中的这个字段”(它不会保存,关系将为null,在查看有关CustomerBooking历史数据时,您将看不到它)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM