Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么';Hibernate EnVers中@NotAudited和RelationTargetAuditMode.NOT_AUDITED之间的区别是什么? @NotAudited @已审核(targetAuditMode=关系targetAuditMode.未审核) @OneToMany(mappedBy=“预订”) @订购人(“预订订单”) private List customerBookingList=new LinkedList();_Java_Hibernate_Hibernate Envers - Fatal编程技术网

Java 什么';Hibernate EnVers中@NotAudited和RelationTargetAuditMode.NOT_AUDITED之间的区别是什么? @NotAudited @已审核(targetAuditMode=关系targetAuditMode.未审核) @OneToMany(mappedBy=“预订”) @订购人(“预订订单”) private List customerBookingList=new LinkedList();

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。我相信你可以在一个有

为什么两者都用?两者都用是好的还是一个就足够了?

审核目标实体及其关系是两件不同的事情。所以这取决于你需要什么。从文件:

如果要审核目标实体未审核的关系(例如字典式实体的情况,它不会更改,也不必审核),只需使用@audited(targetAuditMode=RelationTargetAuditMode.not\u audited)对其进行注释即可。然后,在读取实体的历史版本时,关系将始终指向“当前”相关实体


如果您根本不希望审核值/关系,请在字段上使用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>();