NHibernate HQL結合がすべての必要な行を返さない
-
06-07-2019 - |
質問
オブジェクトグラフではなく個々の列を返す既存のHQLクエリを変更していますが、必要なすべての行を取得できません。
現在のスキーマに関するいくつかの事実:
- 見積もりは契約に属します。
- 契約のOwningDepartmentプロパティはnullにできます。
- 部門のParentBusinessStreamプロパティをnullにすることはできません
これはクエリです:
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
残念ながら、親契約に所有部門がない場合、私のクエリは見積もりを返しません。代わりに、関連するフィールドをnullにするだけです。左外部結合を試しましたが、同じ結果が得られました。
ご協力いただければ幸いです。バカなことをしてしまったらおApびします。
乾杯、
ジェームズ
解決 2
私はそれを解決したと思います:d.ParentBusinessStream.Titleは暗黙的な内部結合ですが、dがnullになる可能性があるため、正しく機能しません。これを考慮に入れるためにクエリを変更しました
他のヒント
左外部結合を含む異常なクエリは、適切なSQL構文とHQLのパワーにアクセスできるISQLQueryを使用することで改善されることがわかりました。
それ以外に、通常役立つマッピングファイルを提供しません
所属していません StackOverflow