继承:上实体类型和子类的属性
问题描述:
我有我在NHibernate的使用表的每类映射到的继承层次结构判据。我的映射文件看起来像下面的文件(大量属性省略)。继承:上实体类型和子类的属性
查询这个层次,我基于从用户输入过滤器建立一个动态的DetachedCriteria为消息。消息(层次结构中的任何类型)应该在一个列表中返回给用户。
- 我想建立一个基于消息类型的标准,即。用户可以指定获取类型为的所有消息SMSMessage或EmailMessage与ReceivedDate>'2009-01-01'。我会怎么做呢?
- 在相同的查询中,用户可以指定如果消息是InternalMessage,它应该有优先级 = 2.我该如何指定这种类型特定的谓词?
所有这些都可以在LINQ中完成,所以我希望我也可以在NHibernate中做到这一点。
<class name="Message" table="Message" abstract="true" discriminator-value="null">
<id name="MessageId">
<generator class="identity" />
</id>
<discriminator column="Type" type="byte" />
<property name="ParentId" />
<property name="ReceivedDate" />
...
<subclass name="SMSMessage" discriminator-value="0">
<property name="Text" column="Text" />
...
</subclass>
<subclass name="MMSMessage" discriminator-value="1">
<property name="Subject" />
...
</subclass>
<subclass name="EmailMessage" discriminator-value="2">
<property name="BodyPlainText" />
...
</subclass>
<subclass name="InternalMessage" discriminator-value="4">
<property name="Priority" />
...
</subclass>
</class>
答
我有点想通了这一点我自己,但最终我最终恢复到纯SQL,因为我击中HQL /规定 - 太多的障碍。无论如何,我可以分享我是如何做到这一点的。
也许不是很漂亮,但我加鉴别列作为一个普通的属性到顶层类层次结构中的(消息)和使用的限制,针对该列解决它。
事实证明,你可以指定为对抗甚至在*查询子类性质的限制,所以这是比我想象的更容易。这只是一个明确限制的问题。