2009-10-23 10 views
2

Je modifie une requête HQL existante qui renvoie des colonnes individuelles plutôt qu'un graphique d'objet mais maintenant je ne reçois pas toutes les lignes dont j'ai besoin.NHibernate HQL Join Ne retournant pas toutes les lignes requises

Voici quelques faits sur le schéma actuel:

  • Une estimation fait partie d'un contrat.
  • La propriété OwningDepartment d'un contrat peut être nulle.
  • La propriété ParentBusinessStream d'un département ne peut pas être nul

Ceci est la requête:

select e.ID, e.StatusCode.ID, e.InputDate, e.ParentClient.Name, e.ParentContractLocation.ParentLocation.Description, e.Description, e.InternalRef, e.ExternalRef, e.TotalIncTax, e.TaxTotal, e.Closed, e.ViewedByClient, e.HelpdeskRef, e.ParentContract.Reference, d.ParentBusinessStream.Title, d.Name 
from Estimate e, Department d where (e.ParentContract.ID in (select cs.ParentContract.ID from ContractStaff cs 
where cs.ParentStaff.ID=:staffID)) and ((d.ID = e.ParentContract.OwningDepartment.ID) OR (d.ID is null)) order by e.ID 

Malheureusement ma requête ne renvoie pas les estimations pour lesquelles le contrat mère ne dispose pas d'un service propriétaire. Au lieu de cela, je veux que les champs pertinents soient juste nuls. J'ai essayé une jointure externe gauche mais j'ai obtenu les mêmes résultats.

Toute aide serait grandement appréciée. Toutes mes excuses si j'ai fait quelque chose de stupide.

Cheers,

James

Répondre

0

Je pense que je travaille dehors: d.ParentBusinessStream.Title est une jointure interne implicite mais comme d peut être nulle elle ne présente pas fonctionne correctement. J'ai changé ma requête pour prendre ceci en compte

0

j'ai trouvé que les requêtes inhabituelles contenant extérieur gauche des jointures mieux en utilisant un ISQLQuery qui vous donne accès à une syntaxe SQL, ainsi que une certaine puissance HQL.

En outre, vous ne fournissez pas les fichiers de mappage qui sont généralement utiles

+0

Salut, Merci pour la réponse. Malheureusement, l'idée d'utiliser une requête SQL ne me plaît pas pour les raisons suivantes: - Notre client ne veut pas nécessairement s'en tenir à un certain type de base de données et peut en changer à l'avenir. - La requête HQL que j'ai publiée est plutôt méchante. Pour répliquer cela en SQL ajouterait le rendre encore plus complexe puisque la jointure interne devrait être faite manuellement. Je ne peux pas poster les mappings pertinents avant la semaine prochaine puisque j'ai une semaine de congé. Cheers, James – James

Questions connexes