Hibernate EnVers中的@NotAudited和RelationTargetAuditMode.NOT_AUDITED有什么区别?
@NotAudited @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) @OneToMany(mappedBy = "booking") @OrderBy("bookingOrder") private List<CustomerBooking> customerBookingList = new LinkedList<CustomerBooking>();
为什么使用两个? 使用两者还是一个足够好?
如果您不希望对价值/关系进行审核,请在字段中使用“未审核”。 我相信你可以在有或没有关系的领域(如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注解,至less我审计外键值/ ID,而不是关系另一端的实体。 如果你没有这个注释,你会得到一个运行时exception,其中ENVERS试图将审计logging插入到未审计实体的审计表中,并且该表不存在。 我使用NotAudited注释来处理几个ManyToMany连接表关系,我不需要审计,审计实体表本身也没有任何logging(无外键ID /值)。
哦,是的 – 文件没有说如果你使用两个(不知道哪一个有优先权)会发生什么,但我不认为同时在一个给定的领域同时使用。 使用一个或另一个。
审计目标实体及其关系是两个单独的事情。 所以这取决于你需要什么。 来自Hibernate Envers – Easy Entity审核文档:
如果你想审计一个关系,目标实体没有被审计(例如类似于字典的实体,这种情况不需要被审计),只需用@Audited( targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)。 然后,在阅读您的实体的历史版本时,关系将始终指向“当前”相关实体。
- Java Persistence API中的FetchType LAZY和EAGER的区别?
- Hibernate表没有映射错误
- 设置SQL Server的Maven依赖关系
- Hibernate SessionFactory与EntityManagerFactory
- JPA OneToMany和ManyToOne关系
- 如何在JPA中复制Hibernate的saveOrUpdate?
- 如何使用JPA和Hibernate解决LazyInitializationException
- 如何避免使用Hibernate HQL结果的types安全警告?
- 绕过Hibernate中的GeneratedValue(合并数据不在数据库?)