4

私のアプリケーションは、ドメイン オブジェクトの大きなツリーを使用しており、これらのオブジェクトのほとんどについて、いくつかの基本情報 (updatedby、変更時刻など) を保持したいと考えています。これらのプロパティと列をアプリケーションに既に追加しています。

さまざまなコンストラクターなどでこれらの値の設定をコーディングしようとしていたとき、永続化レイヤーがこれを透過的に処理する必要があることに気づきました。

しかし、どのように?

確かに DAO 内からこれを行うことができますが、カスケード保存を介して永続化されたオブジェクトを処理する方法は? それらの persist() メソッドをインターセプトする方法はありますか?

この機能を実装する良い方法は何ですか?

4

2 に答える 2

6

Hibernate Enversをご覧になることをお勧めします。

于 2010-07-07T10:02:12.333 に答える
5

監査目的で JPA を使用する場合は、PrePersist および PreUpdate コールバック アノテーションを利用できます。JPA WikiBook には、そのような例が 1 つあります。この場合、マップされたスーパークラスがあると非常に役立ちます。そうしないと、引き続き「ユーザー」空間コードを介してこれを行うことになります。

これを行う別の方法は、テーブルでトリガー (ahem) を使用することです。ただし、これにはパフォーマンスへの影響があります。Openbravo ERP プロジェクトは、監査証跡を生成するためにこのアプローチを使用しているようです。

更新: 監査機能を、ドメイン モデルのスーパー クラス以外の別のクラスに分離することをお勧めします。JPA イベント リスナーは、同じことを達成するのに役立ちます。ここに良い例があります

于 2010-07-07T05:26:04.523 に答える