1

外部キーを監査するとき、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 は、特定のもの (特定のアドレス タイプのすべてのバージョンなど) を識別します。すべてのルックアップ テーブルがアプリケーション データベースに複製されますが、現在のデータのみが複製され、履歴データは複製されません。]

4

1 に答える 1

0

これは、referencedColumnName と RTAM.NOT_AUDITED の使用が交差するバグである可能性があります。バグ レポート @ https://hibernate.onjira.com/、enversコンポーネントを提出してください。

于 2013-03-12T13:03:35.807 に答える