2010-08-30 11 views
2

J'écris une requête HQL, sous forme de:de retour données supplémentaires de HQL

from a where ... or exists (from b inner join b.c where ...) and ... 

je reviens une entité de type a de cette requête. Cependant, je dois aussi savoir si la clause exists est revenue vrai ou pas plus tard dans mon code. Si c'était SQL, je l'ajouterais à la liste de sélection. Cependant, même si j'ajouter à la clause select HQL, de sorte qu'il devient:

select a, exists (from b inner join b.c where ...) as x from a where ... or x and ... 

Dans mon code, je dois maintenant choisir entre l'affichage des données non typées, ou l'affichage des entités typées de type a et jeter ma valeur x qui est revenu avec.

Existe-t-il un moyen de récupérer en quelque sorte les données dactylographiées plus la colonne supplémentaire?

Répondre

3

Vous avez deux options ici comme je le vois:

1) Ajouter la propriété supplémentaire en lecture seule propriété mappée à votre entité, faisant usage de la cartographie formula pour calculer la valeur à l'aide sql en ligne ou un UDF.

2) obtenir uniquement les données que vous besoin retour à l'aide d'une requête hql personnalisée et utiliser le aliastobeanresulttransformer pour projeter un fortement typé DTO qui comprend vos champs d'intérêt.

Le chemin que vous emprunterez dépend vraiment de vous, mais j'aurais tendance à pencher vers l'option 2 afin de ne pas polluer votre modèle de domaine avec des champs inutiles.

+0

Je suis allé sur la route 'aliastobeanresulttransformer'. Cependant, j'ai besoin d'utiliser un type d'utilisateur (IUserType) pour mapper l'une des colonnes. Y a-t-il un moyen de faire cela? –

+0

Cela devrait fonctionner de manière transparente; sélectionnez simplement la propriété IUserType-dependent en utilisant hql; il devrait être traité comme si vous étiez en train de sélectionner une entité régulière. – DanP

+1

* aliastobeanresulttransformer *! Je souhaite que nous puissions abandonner une partie de cette terminologie folle dans nhibernate. – UpTheCreek