Java 什么';Hibernate EnVers中@NotAudited和RelationTargetAuditMode.NOT_AUDITED之间的区别是什么? @NotAudited @已审核(targetAuditMode=关系targetAuditMode.未审核) @OneToMany(mappedBy=“预订”) @订购人(“预订订单”) private List customerBookingList=new LinkedList();
为什么两者都用?两者都用是好的还是一个就足够了?审核目标实体及其关系是两件不同的事情。所以这取决于你需要什么。从文件: 如果要审核目标实体未审核的关系(例如字典式实体的情况,它不会更改,也不必审核),只需使用@audited(targetAuditMode=RelationTargetAuditMode.not\u audited)对其进行注释即可。然后,在读取实体的历史版本时,关系将始终指向“当前”相关实体Java 什么';Hibernate EnVers中@NotAudited和RelationTargetAuditMode.NOT_AUDITED之间的区别是什么? @NotAudited @已审核(targetAuditMode=关系targetAuditMode.未审核) @OneToMany(mappedBy=“预订”) @订购人(“预订订单”) private List customerBookingList=new LinkedList();,java,hibernate,hibernate-envers,Java,Hibernate,Hibernate Envers,为什么两者都用?两者都用是好的还是一个就足够了?审核目标实体及其关系是两件不同的事情。所以这取决于你需要什么。从文件: 如果要审核目标实体未审核的关系(例如字典式实体的情况,它不会更改,也不必审核),只需使用@audited(targetAuditMode=RelationTargetAuditMode.not\u audited)对其进行注释即可。然后,在读取实体的历史版本时,关系将始终指向“当前”相关实体 如果您根本不希望审核值/关系,请在字段上使用NotAudited。我相信你可以在一个有
如果您根本不希望审核值/关系,请在字段上使用NotAudited。我相信你可以在一个有或没有关系的领域里使用这个,比如一个公司,很多公司,或者仅仅是一个专栏。如果希望审核值,但不希望审核关系另一端的实体,请在关系字段上使用RelationTargetAuditMode.NOT_AUDITED。例如,您希望审核ID/键值,但不希望审核相关表 您还可以将RelationTargetAuditMode应用于整个类,我相信这只是说,对于类中的所有关系,不要审核另一端。这让我很困惑,因为我错误地使用了这个注释来表示不要审核下面的实体,这不是它的意思。如果您不想对实体进行审计,就不要在实体类上添加审计注释。在引用该实体的其他已审核实体上,您必须在关系字段中使用NotAudited或RelationTargetAuditMode.NOT_audited 关于这个主题()的官方文档不是很好,甚至没有提到NotAudited 在我过去的项目中,我需要审核一组非常特定的表,而不是其他表,因此我需要使用这些注释。我与一些审计实体中的一些未审计实体存在外键关系。我经常使用RelationTargetAuditMode.NOT_AUDITED注释,以便至少审核外键值/ID,而不是关系另一端的实体。如果没有此注释,则会出现运行时异常,其中ENVERS尝试将审核记录插入未审核实体的审核表中,而该表将不存在。我将NotAudited注释用于一些我不需要审核的多个联接表关系,并且在已审核的实体表本身上没有要记录的内容(没有外键ID/值) 哦,是的-文档没有说明如果您同时使用这两个字段会发生什么(不确定哪一个具有优先级),但我不认为在给定字段上同时使用这两个字段是有意的。使用一个或另一个。
@Audited(targetAuditMode=RelationTargetAuditMode.NOT_Audited)
只有一个用法:当您拥有与未审核实体的关系的已审核实体,并且希望在审核数据中获得有关未审核实体id的信息时。假设CustomerBooking
已审核,而Hotel类未审核。酒店字段有两种选择:@NotAudited
(在这种情况下,您将在历史数据中根本没有酒店信息)或@Audited(targetAuditMode=RelationTargetAuditMode.not\u Audited)
,在这种情况下,您将始终在审计数据中拥有酒店的最新状态。
请注意,如果酒店已审核RelationTargetAuditMode.NOT_audited
将被忽略(您将拥有酒店的历史数据)。
@NotAudited
的意思是“我只是不关心历史数据中的这个字段”(它不会被保存,关系将为空,你在查看有关客户预订的历史数据时不会看到它)我知道它的古老历史,但。。。对于原始问题,他必须使用@NotAudited,因为它是由目标实体CustomerBooking处理的双向关系。至少对于JPA 2.1+Hibernate 4.3.10,@Audited(targetAuditMode=NOT_Audited)在这种情况下不起作用。这个答案不能解释NotAudited与RelationTargetMode.NOT_Audited之间的区别。它不指示何时使用一个而不是另一个。关于RelationTargetAuditMode.NOT_注释的非常有用的解释。官方文件在某些方面真的很糟糕。。。谢谢大家!@Ryan当您查询与标有RelationTargetAuditMode.Not_audited
的实体有关系的已审计实体的修订数据时,它是否正确查找当前引用的实体(即唯一的实体)?在我的例子中,envers正在为一个不存在的审计表生成SQL语句,尽管有注释。
@NotAudited
@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
@OneToMany(mappedBy = "booking")
@OrderBy("bookingOrder")
private List<CustomerBooking> customerBookingList = new LinkedList<CustomerBooking>();