Phi*_*hil 49 java hibernate hibernate-envers
@NotAudited
@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
@OneToMany(mappedBy = "booking")
@OrderBy("bookingOrder")
private List<CustomerBooking> customerBookingList = new LinkedList<CustomerBooking>();
Run Code Online (Sandbox Code Playgroud)
为什么同时使用?使用两者还是足够好?
Rya*_*yan 45
如果您不希望审核值/关系,请在字段上使用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 /值).
哦是的 - 文档没有说明如果你同时使用两者(不确定哪一个具有优先权)会发生什么,但我不认为在给定字段上同时使用两者都是有意的.使用其中一个.
Whi*_*g34 38
审计目标实体及其关系是两个不同的事情.所以这取决于你需要什么.从Hibernate Envers - Easy Entity Auditing文档:
如果要审计目标实体未被审计的关系(例如,类似字典的实体,不会更改而不必审计),只需使用@Audited注释( targetAuditMode = RelationTargetAuditMode.NOT_AUDITED).然后,在读取实体的历史版本时,关系将始终指向"当前"相关实体.
小智 5
@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
只有一种用法:当您拥有与未审计实体的关系的审计实体,并且您希望审计数据中有关未审计实体的 id 的信息时。假设CustomerBooking
已审核,但未审核 Hotel 类。酒店字段有两种选择:(@NotAudited
在这种情况下,您将根本没有历史数据中的酒店信息),或者@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
在这种情况下,您将始终拥有审计数据中酒店的最新状态。请注意,如果酒店被审计RelationTargetAuditMode.NOT_AUDITED
将被忽略(您将拥有酒店的历史数据)。
@NotAudited
意思是“我只是不关心历史数据中的这个字段”(它不会被保存,关系将为空,你在查看历史数据时不会看到它CustomerBooking
)
归档时间: |
|
查看次数: |
26241 次 |
最近记录: |