2008-12-16 17 views
4

在我的域模型中,我有一個抽象類CommunicationChannelSpecification,它具有像FTPChannelSpecification,EMailChannelSpecification和WebserviceChannelSpecification這樣的子類。現在我想創建一個HQL查詢,其中包含一個將結果縮小到特定類型的通道規範的where子句。例如。 (用簡單的英語)選擇所有類型出現在集合{FTPChannelSpecification,WebserviceChannelSpecification}中的CommunicationChannelSpecifications。在HQL中使用對象的類型其中子句

HQL如何實現?我使用NHibernate 2.0.1和每個子類繼承映射策略的表...

謝謝!

帕斯卡爾

回答

8

NHibernate的並不積極,但在Hibernate中,有總是引用id和class兩個特殊的屬性。所以,對於你的具體情況,我會做

from CommunicationChannelSpecifications spec where spec.class in (?) 
+1

很好的答案,但如果我們想在更新(hql)中做到這一點。我的意思是更新實體在哪裏class = com.pa.SubEntity? – ssedano 2010-11-17 11:41:09

0

在這種情況下NHibernate支持與Hibernate相同的語法。例如,請參閱here