2010-08-31 56 views
3

例如,如果您有Apple:IWhatever和Orange:无论您想如何找到它们,因为它们是IWhatevers,您需要在NHibernate中做什么?nhibernate查询实现接口的所有对象

它完全依赖于HQL或标准查询,还是在映射中还需要做些什么?如果有映射需求,流利NHibernatee可以支持它吗?

回答

1

你可以做一个UnionSubClass映射。不幸的是,它在Fluent中没有报道。

你映射会是这样的:

<class name="IWhatever" abstract="true"> 
    <id name="Id"> 
    </id> 

    <union-subclass name="Apple"> 
     <property name="Bla" type="int"/> 
    </union-subclass> 

    <union-subclass name="Orange"> 
     <property name="Bla" type="int"/> 
    </union-subclass> 
</class> 
+0

你仍然可以正常地映射苹果和桔子,或者是那种嵌套的类映射为具体类型的映射吗?你需要在你的查询中做什么特别的事情?干杯! – Berryl 2010-08-31 21:31:30

+0

不幸的是它的映射:(至于查询,只要继续并做一个Session.CreateCriteria.For () – Pedro 2010-09-01 03:15:45

+0

看起来这是要走的路。[Ayende post](http://ayende.com /Blog/archive/2009/04/10/nhibernate-mapping-ndash-inheritance.aspx)建议你在使用HiLo的时候需要使用HiLo身份。另一个[SO帖子]支持这一点,并且还提出了解决方法让它做FNH吧干杯 – Berryl 2010-09-02 03:00:08

4

为标准,你不需要映射。只是:

session.CreateCriteria<IWhatever>() 
     .List<IWhatever>(); 

请记住,你只能够查询/排序/项目存在于IWhatever的字段。

+0

不错,我不知道你可以做到这一点没有映射 – Pedro 2010-09-01 17:17:04

+0

隐式多态性:-) – 2010-09-01 18:24:20

+0

我做了一开始没有这个。所以,如果我只需要苹果和桔子,我就可以将这些通常映射出来,然后将它们作为国产植物检索出来。有没有与HQL等价的东西?这对于我需要做的事情来说是完美的。干杯! – Berryl 2010-09-02 15:24:27