2009-05-05 5 views
1

は、次のhibernate設定を考えてみましょう。 HibernateのAuditInterceptorクラス(Interceptorを実装)では、エンティティがAuditableのインスタンスである場合、監査機能を実行します。要するに、このコードのすべては、私たちはいくつかのためにチェックすることはできません... ...しかし休止監査可能な多対多の関係は

、我々は技術的にそれのためのPOJOを持っていないので、監査されません。このPersonAddressテーブルがあります素晴らしい作品"instanceof"このPersonAddressテーブルを傍受するように指示することができる休止状態の設定には何らかの方法がありますか?インターセプターからの他のアクションの1つ(onCollectionUpdateなど)を処理する必要があるかもしれません。私は確信していません...

Auditに強制すると考えることができる唯一の他の方法は、PersonからPersonAddressへの1対多の関係を、AddressからPersonAddressへの1対多に変換することですPersonとAddressに多対1のマッピングを戻すPersonAddress用の別のクラス要素を作成します。

これは余分な仕事のようなものだと私は本当に余分な仕事を避けたい。

誰かがより良い解決策を提案できますか?

ありがとうございます!

答えて

0

多対多マッピングでは分からなかったので、マッピングを一対多に変換し、適切な休止状態マッピングを持つPersonAddressのモデルBeanを作成しました。

ありがとうございます!

0

あなたはどのようにして住所を住所に追加しますか? PersonAddressのドメインオブジェクトを持っていないので、それらのリレーションに対する編集は、PersonまたはAddressのいずれかでなければなりません。

もしそうなら、個人またはアドレス監査の一部として監査を実行してください。個人的に例えば

、:人を監査するとき、それは空ではない場合

class Person { 
    private List<Address> addedAddresses; 
    private Set<Address> addresses; 
    . 
    . 
    . 
    public void addAddress(Address toAdd) { 
     addedAddresses.add(toAdd); 
     addresses.add(toAdd); 
    } 
} 

その後、addedAddressesに記録エントリを記録します。

もちろん、これは非常に簡単です(アドレスの編集ではどうすれば削除できますか?)が、あなたの例ではこれ以上続かないでください。

+0

実際には、PersonオブジェクトとAddressオブジェクトの両方にデータを追加します。私たちは、HibernateがPersonAddressテーブルを更新しないことを発見しました。 マニングのHibernate In Action(343ページ)にあるAuditLogInterceptorの修正版を使用しています。一般的な考え方は変わりません。つまり、POJOを確認するための特別なロジックがありません。提供されたエンティティがAuditableタイプである場合、そのエンティティを更新セット、挿入セット、または削除セットに追加します。 この2つの特定のクラスのロジックを削除することはできますが、関係が何らかの方法で変更されたかどうかはわかりません。 –