多くの既存のアプリケーション (MS Access、Delphi、Perl、C#、PHP などで記述) の複雑なシステムに JPA アプリケーションを追加しています。基礎となる MS-SQL データベースは、データベース トリガーを使用して、変更されたデータベース エントリのコピーを履歴データベース テーブルに書き込み、 と を追加SYSTEM_USER
しGETDATE()
ます。
私の新しいJPAアプリケーションは接続プールを使用しているため、データベーステーブルのすべての変更は常にテクニカルユーザー(ユーザー:「Java」)によって行われ、JPAアプリケーションのすべての履歴データベーステーブルエントリには常にSYSTEM_USERとして「Java」が含まれます。
既存のトリガーを削除せずに、履歴テーブルにエントリを自動的に作成する方法は?
私は考えました:
- ユーザー「Java」がテーブルを変更し、自分で履歴データベーステーブルエントリを作成するたびに、既存のトリガーを開始しないように指示します。したがって、履歴データベース テーブルごとに新しいエンティティ クラスを多数作成する必要がありました。あまり便利ではありません。
- 接続プールを無効にし、変更ごとに個別の接続を作成します - 実際のユーザーを使用してデータベースに接続します。しかし、これにはパフォーマンス上の欠点があります。また、接続プールを無効にする方法がわかりません。
- 一時テーブルを使用して常に現在のユーザーを保存します - データベーストリガーは、履歴データベーステーブルにエントリを作成するときに、その保存されたユーザーを使用する必要があります
- 操作後に履歴データベース テーブル内のユーザーを手動で変更します。