1

次のタスクを実行するためのエレガントな方法を探しています。Ticketという1つのエンティティがあり、owner、createdTs、body ....などのフィールドがあります。また、実行されたすべての変更を追跡するListエンティティもあります。チケット。
私のアプリはStrus2、Spring 3、Jpa + Hibernateでビルドされており、save / updateTicket(Ticket ticket)メソッドを持つサービスクラスTicketServiceがあります。
アスペクト@Beforesave/ updateメソッドを実装しようとしましたが、変更を検出し、これらの変更に従ってTicketHistoryオブジェクトを作成するために、チケットの古い値にアクセスできないという問題があります。
他の多くのメソッドからこのメソッドにアクセスし、現在これらのオブジェクト(TicketとTicketHistory)が緊密に結合されているため、アスペクトアプローチを試しました。

何か案が ?ありがとう、
エイドリアン

4

1 に答える 1

1

Hibernate を使用しているため、非常に優れた宣言型ソリューションがあります。

アンヴェール

Envers (エンティティ バージョンの場合)注釈が付けられたエンティティの変更を自動的に検出@Auditedし、データベースに履歴を作成します。変更を行ったユーザーなどのカスタム情報をリビジョンに追加することもできます。

詳細については、Envers のクイックスタートを参照してください。

欠点は、コードを変更する必要がなくなるため、ある程度のコードを変更する必要があることですTicketHistoryエンティティの古いリビジョンには、 AuditReaderクラスを介してアクセスします。

また、Envers を使用する場合、プログラムは JPA だけでなく、Hibernate に直接依存することにも注意してください。永続化プロバイダーを変更したい場合 (これは頻繁に発生するわけではありません)、さらに作業が必要になります。

于 2012-10-15T13:28:35.897 に答える