アプリケーションの構成用のドメインオブジェクトとそれに関連するテーブルのセットがあります。認証されたユーザーは、プレゼンテーション層を介してこれらのドメインオブジェクトデータを変更できます。これらの ドメインオブジェクトには非常に重要なデータがあり、誰がいつデータを変更したかを見つける必要があります。私のアプリケーションのデータアクセスレイヤーは、JPA、Hibernate、Springを使用して実装されています。ユーザー+アクション日付+アクションタイプ+以前の値で構成されるすべての変更の記録が必要です。
たとえば、些細なドメインオブジェクト(この質問の目的のために簡略化されています)を考えてみましょう。
@Entity
class Connection
{
private Long id;
private String name;
private String protocol;
}
Connection
次の値を持つインスタンスがあると想定します。
Connection
id = 1;
name = Web;
protocol = HTTPS;
ユーザー(例John
)がUIにログインし、この接続を次の値に変更した後:
Connection
id = 1;
name = Web;
protocol = HTTP;
ご覧のとおり、JohnはプロトコルをHTTPS
からHTTP
(安全なプロトコルから安全でないプロトコルに!)に変更しました。その結果Connection
、監査可能にするためにインスタンスの履歴を別のテーブルに保存する必要があります。
私は自分のための解決策を研究し、次の結果を見つけました:
- トリガー: 1つの可能性は、テーブルにトリガーを定義することです。この方法の短所は、データベースへの依存関係です。
- Hibernate Envers:このソリューションは優れていますが、DAOレイヤーがHibernateに依存するようになり、JPAとそのプロバイダーの独立性のメリットが得られません。
- Spring Data Commons + hades:は良いですが、 : 、、、など
MappedSuperClass
の注釈によって任意のエンティティに列を追加しました。これは、エンティティの完全な履歴と状態を保存することを意味します。Create User
Create Date
Last Update User
Last Update Date
- 私自身の設計/実装: *この目標のためにレイヤーを実装することはできますが、この要件は私にとって特別なものではなく、ベストプラクティスに従って他の人によって解決されたと思うので、このソリューションは好きではありません(すべきではありません) t車輪の再発明)
誰かがこの問題の提案や解決策を持っていますか?
(私の質問が長く、専門家にとって基本的すぎる場合は申し訳ありません)