2 つの既存のテーブル(User: UserId, Name)と(Location: LocationId, Name)の間に多対多の関係がありますが、これらは変更できません。多対多のマッピングを使用しましたが、履歴/将来の動きを含めるという新しい要件があります。
最初の 3 つのフィールドが主キーを構成する古いテーブルを置き換える新しい交差テーブル(UserLocation: UserId、LocationId、EffectiveDate、Status)のレコードを効果的にデートするという peoplesoft の概念を使用しました。
SQL では、次のステートメントを使用して、特定の発効日のアクティブなレコードを返すことができますが、NHibernate からこのようなものを取得することはできません (複数レベルの選択でパラメーターが機能していないというエラーが表示されることさえあります)。
select l.*
from location l
where l.locationId in
(select ul.locationId
from UserLocation ul
where (ul.EffectiveDate =
(select max(ul_ed.EffectiveDate)
from UserLocation ul_ed
where ul.LocationId = ul_ed.LocationId
and ul.EffectiveDate = ul_ed.EffectiveDate
and ul.UserId - ul_ed.UserId
and ul.Status = true))
UserId 列と EffectiveDate 列のパラメーターを含めて、さらにフィルター処理されたレコードを返す必要がありますが、最初からすべてを返すことができれば幸いです。
ただし、私の問題はマッピングクラスであり(流暢ではなくコードマッピングを使用しています)、動作に近づけることさえできません(NHibernateの知識が限られています)。交差テーブル用の新しいクラスを作成する必要がないことを望んでいました。選択を機能させることさえできないため、挿入/更新/削除の部分にまだ到達していません。
要件: 1. ユーザーをEffectiveDate = NOW、Status = Trueの場所に関連付けるときは、UserLocationに新しいレコードを挿入します。 3. ユーザーを新しい場所に移動すると、EffectiveDate = NOW、Status = TrueのUserLocationに新しいレコードを挿入する必要があります。ロケーションのユーザーは、EffectiveDate = NOW、Status = False の新しい UserLocation レコードを挿入します。 5. ユーザーが特定の日付に関連付けられているロケーションを取得します。
注: このデータに基づいてレポートが生成されるため、記録を削除することはできません。また、将来のイベントのためにデータも作成されます。
誰かが私を正しい方向に向けて始めることができれば、それはありがたいです. Loader クラスと Interceptor クラスを見てきましたが、適合しないようです。