これが私のユースケースです
Personn と Email (@OneToMany 関係) の 2 つのエンティティがあります。どちらも監査を受けています。
最初に、電子メールを使用して新しい Personn を作成します (=> どちらもリビジョン 1 です)。次に、電子メールを変更します (=> 電子メールにはリビジョン 2 がありますが、Personn にはリビジョン 1 しかありません)。
Web アプリケーションでは、エンドユーザーは、ユーザーの属性と電子メールの属性を表示するビューを 1 つしか持っていません。このビューでは、この Personn の既存のすべてのリビジョンを表示したいと考えています。しかし、監査システムにクエリを実行すると、Personn が変更されていないため、リビジョン 2 が表示されません。
技術的な問題は理解していますが、エンドユーザーの観点から見ると、彼は担当者の電子メールを変更したため、リビジョン 2 を見たいと考えています。彼は、私たちがこれらの情報を 2 つの Java オブジェクトに分割することを決定したことを知りません (知る必要もありません)。もちろん、この問題は Personn-Email の関係だけではありません (私は Personn と、同じビューに表示される他のオブジェクトとの間に多くの関係を持っています - 住所、仕事、サイト、カードなど)
私は2つの解決策について考えました:
1- リビジョンが存在するかどうかを知るためにすべてのリレーションを照会します (ただし、大きなリクエストまたは複数のリクエストが生成されると思います - 私はたくさんのリレーションを持っています)。
2-「hibernate.listeners.envers.autoRegister」を false に設定し、独自の EnversIntegrator とイベントの実装を作成します。イベント実装 (デフォルトの Envers 実装をオーバーライドします) では、Email の属性が変更されたときに Personn 用の ModWorkUnit を作成します (もちろん、ハード コードされていません: personn フィールドに @AuditedPropagation のようなカスタム アノテーションを付けます)。このソリューションの欠点は、変更されていない場合でも、Personn の行が大量に作成されることです。
これらのソリューションについてどう思いますか? そのようなユースケースを解決するためのより良い方法を知っていますか?
アドバイスありがとうございます。