Hibernate EnVers の @NotAudited と RelationTargetAuditMode.NOT_AUDITED の違いは何ですか? 質問する

Hibernate EnVers の @NotAudited と RelationTargetAuditMode.NOT_AUDITED の違いは何ですか? 質問する
@NotAudited
@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
@OneToMany(mappedBy = "booking")
@OrderBy("bookingOrder")
private List<CustomerBooking> customerBookingList = new LinkedList<CustomerBooking>();

なぜ両方を使用するのですか? 両方を使用するのは良いことでしょうか、それとも 1 つだけで十分でしょうか?

ベストアンサー1

値/関係をまったく監査したくない場合は、フィールドで NotAudited を使用します。これは、OneToMany、ManyToMany、または列のみなどの関係の有無にかかわらず、フィールドで使用できると思います。値は監査したいが、関係のもう一方の側のエンティティは監査したくない場合は、関係フィールドで RelationTargetAuditMode.NOT_AUDITED を使用します。たとえば、ID/キー値は監査したいが、関連するテーブルは監査したくない場合などです。

また、クラス全体に RelationTargetAuditMode を適用することもできます。これは、クラス内のすべての関係について、もう一方の端を監査しないことを意味するだけだと思います。この注釈を誤って、下のエンティティを監査しないという意味で使用していたため、混乱しました。これは意味するところではありません。エンティティを監査したくない場合は、エンティティ クラスに 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 が監査対象外エンティティの監査テーブルに監査レコードを挿入しようとして、そのテーブルが存在しないというランタイム例外が発生します。監査する必要がなく、監査対象エンティティ テーブル自体に記録するものがない (外部キー ID/値がない) いくつかの ManyToMany 結合テーブル リレーションシップに NotAudited アノテーションを使用します。

ああ、そうそう、ドキュメントには両方を使用した場合に何が起こるかは書かれていません (どちらが優先されるかはわかりません) が、特定のフィールドで両方を同時に使用することは意図されていないと思います。どちらか一方を使用してください。

おすすめ記事