Question

Je modifie une requête HQL existante qui renvoie des colonnes individuelles plutôt qu'un graphe d'objet, mais je n'ai pas toutes les lignes dont j'ai besoin.

Voici quelques faits sur le schéma actuel:

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

C'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 d'estimations pour lesquelles le contrat parent n'a pas de département responsable. Au lieu de cela, je veux que les champs pertinents soient simplement nuls. J'ai essayé une jointure externe gauche mais les résultats sont identiques.

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

A bientôt,

James

Était-ce utile?

La solution 2

Je pense avoir résolu le problème: d.ParentBusinessStream.Title est une jointure interne implicite, mais puisque d peut être null, il ne fonctionne pas correctement. J'ai changé ma requête pour en tenir compte

Autres conseils

J'ai constaté qu'il était préférable d'utiliser des requêtes inhabituelles contenant des jointures externes gauches en utilisant une requête ISQLQuery qui vous donne accès à la syntaxe SQL correcte ainsi qu'à une certaine puissance HQL.

De plus, vous ne fournissez pas de fichiers de mappage, ce qui est généralement utile

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top