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

标签 java hibernate 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 应用于整个类(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/

相关文章:

java - 如何将 swagger-ui.html 设置为默认上下文路径

java - 按指定模式在java中拆分字符串

hibernate - 手动为 Hibernate Envers 创建审计表

java - Hibernate Envers - 请求更改对象列表

java - 使用 Java 自动化谷歌和打印输出

java - 使用 ID 而不是 DATE 列有什么缺点吗?

java - Hibernate Criteria API 仅使用 id 连接到另一个表

spring - 即使没有必要,Hibernate envers 5.2.14 也会创建 hibernate_sequence 表

spring - Hibernate Envers 未找到 JPA 事务 :

java - Spring Rest Docs 片段模板被忽略