外部キーを監査するとき、Envers は JoinColumn アノテーションを無視しているようです。
たとえば、次のような単純なクラスがあります。
@Audited
@Entity
public class Address {
@Id
@GeneratedValue
private int id;
@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
@ManyToOne
@JoinColumn (name="addressTypeFk", referencedColumnName="EntityId",nullable=false)
private AddressTypeLookup addressType;
次のようなルックアップ テーブルを参照します。
@Entity
public class AddressTypeLookup
{
@Id
@GeneratedValue
private int id;
private String descr;
private int entityId;
Address の addressType 属性が、主キーの「id」列ではなく、entityId 列に結合されていることに注意してください。RelationTargetAuditMode.NOT_AUDITED の使用にも注意してください。外部キーを監査したいのですが、AddressTypeLookup への変更を監査したくありません。問題は、Envers が外部キーへの変更を記録するときに、entityId ではなく、AddressTypeLookup プライマリ キー値「id」を記録していることです。Envers に使用された entityId 値を記録させるにはどうすればよいですか?
[なぜこれが必要なのか疑問に思われている方のために: 私たちは参照データのデータベース (別名マスター/参照データ) を持っています。履歴を記録します。すべての行に有効な開始日と終了日があります。id 列は適切に一意です。entityId は、特定のもの (特定のアドレス タイプのすべてのバージョンなど) を識別します。すべてのルックアップ テーブルがアプリケーション データベースに複製されますが、現在のデータのみが複製され、履歴データは複製されません。]