2008-12-16 15 views
4

Dans mon modèle de domaine, j'ai une classe abstraite CommunicationChannelSpecification, qui a des classes enfant comme FTPChannelSpecification, EMailChannelSpecification et WebserviceChannelSpecification. Maintenant, je veux créer une requête HQL qui contient une clause where qui réduit le résultat à certains types de spécifications de canal. Par exemple. (en anglais) sélectionnez toutes les spécifications CommunicationChannel dont les types se trouvent dans l'ensemble {FTPChannelSpecification, WebserviceChannelSpecification}.Utiliser le type d'objet dans HQL où la clause

Comment cela peut-il être réalisé en HQL? J'utilise NHibernate 2.0.1 et une stratégie de cartographie d'héritage de table par sous-classe ...

Merci!

Pascal

Répondre

8

pas positif dans NHibernate, mais en veille prolongée, il y a deux propriétés spéciales qui sont toujours référencées id et class. Donc, pour votre cas particulier, je ferais

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

bonne réponse, mais que faire si nous voulons le faire dans une mise à jour (hql). Je veux dire mise à jour Entity où class = com.pa.SubEntity? – ssedano

0

NHibernate prend en charge la même syntaxe que Hibernate dans ce cas. Voir here pour un exemple.