2009-05-04 16 views
0

親子関係または多対多関係を通じて互いに関係のない2つのテーブル間で左結合を実行できますか?私が見つけたすべてのサンプルは、それらのシナリオだけを示しています。Left join in Hibernate HQL

私は、

同期 次のテーブルを持っている - > OtherInfo

- > ID(文字列) - >実体識別子(文字列) - > OtherInfo

カスタマー - > ID をプロジェクト - > Id - > OtherInfo

シンクは、残りのテーブルに関するメタデータを格納する。 EntityIdは、これらのテーブルのフィールド "Id"を表します(syncと他のテーブルの間に物理的な外部キーは作成されません)。

基本的には、SQLで次のクエリを実行します。

select s。 、e。 sync sから継承するエンティティeをs.entityid = e.id/

(上記のsqlのエンティティは、実際のテーブル、顧客、プロジェクト、または同期の一部のデータを含む他のテーブルに置き換える必要があります。表)。

誰かに、そのクエリがHQLでどのように表現されるべきかに関する助けや助言をいただけますか?

ありがとう パブロ

答えて

3

私の知る限り、これを直接行うことはできません。 HQLはオブジェクト指向であり、マッピングされたエンティティおよび関係のみを知っています。 session.CreateSQLQueryを実行し、.AddEntityを使ってNHibernateにSQLクエリの結果からエンティティ結果をビルドさせることで、これを実現できます。

+0

かなり愚かですが、ほとんどすべての左の結合がこのように行われます。 – DevelopingChris

1

これは私が知っているの参加が、それはいくつかのポインタを与えるかもしれない左ではありません。

http://jaychapman.blogspot.com/2007/10/nhibernate-non-mapped-joins.html

それがマップされていない左はNHに参加していて、への注意事項があることを認識することが長年の問題です回避策。ここで問題と最初のコメントのペアを見てください:https://nhibernate.jira.com/browse/NH-514