我在两个现有表(User: UserId, Name)和(Location: LocationId, Name)之间有多对多关系,这些无法更改。我使用了多对多映射,但我们有一个新要求,包括历史/未来运动。
我使用了 peoplesoft 的概念,即在替换旧表的新相交表(UserLocation:UserId、LocationId、EffectiveDate、Status)中有效地对记录进行约会,其中前 3 个字段构成主键。
在 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 知识)。我希望不必为相交表创建一个新类。我什至还没有进入插入/更新/删除部分,因为我什至无法让 select 工作。
要求: 1. 在将用户关联到 EffectiveDate = NOW,Status = True 的位置时,在 UserLocation 中插入新记录 3. 将用户移动到新位置应在 UserLocation 中插入新记录,EffectiveDate = NOW,Status = True 4. 删除来自该位置的用户将插入新的 UserLocation 记录,其 EffectiveDate = NOW,Status = False 5. 检索用户在给定日期关联到的位置。
注意:由于会根据这些数据生成报告,因此我们无法删除记录,并且还会为将来的事件创建数据。
如果有人能指出我正确的开始方向,那将不胜感激。我查看了 Loader 和 Interceptor 类,但似乎无法使其适合。