2010-08-31 77 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