使用NHibernate进行条件连接和映射

时间:2011-02-08 13:22:05

标签: nhibernate join conditional

我想知道如何使用NHibernate映射以下内容:我有一个User类,一个Preference类和一个PreferenceOption类。

用户有许多偏好(反过来又有偏好选项)。系统的工作方式是所有用户都有一组默认的首选项选项,而单个用户可以通过指定自己的默认值来覆盖这些默认值。这样我们只需要存储系统默认值(由Preference和PreferenceOption表/类表示)和用户的任何特定默认值(由UserPreferenceOption表/类表示)。

理想情况下,我想要做的是映射PreferenceOption类,使其在UserPreferenceOption上执行左外连接,以包含用户的特定默认值(如果存在)。请记住,用户可能没有覆盖系统默认值。

偏好

Id |名称

PreferenceOption

Id |价值| IsDefault | Preference_id

UserPreferenceOption

Id |使用这个| Preference_id | Option_id | USER_ID

SQL查询看起来像这样:

select  PO.Id, PO.Value, PO.IsDefault, PO.Preference_Id, UPO.UseThis
from    PreferenceOption PO Left Outer Join UserPreferenceOverride UPO on PO.Id = UPO.Option_id
and UPO.Profile_id = THE_USER_ID

是否可以使用NHibernate进行映射?

1 个答案:

答案 0 :(得分:0)

我真的不明白你的SQL语句 - 但我在NHibernate中做了类似的事情,它的工作原理如下: 您将首选项选项和用户首选项选项映射到两个单独的包。然后制定一个逻辑,即对于每个首选项,您首先要查看用户首选项选项,然后选择默认首选项选项。

NHibernate中的查询可以使用左外连接:例如如果您使用的是条件API,则为createAlias("products", "product", Criteria.LEFT_JOIN),而在HQL中则为from Cat as cat join cat.mate as mate left join cat.kittens as kitten

我希望这会有所帮助。