2012-11-16 19 views
8

1つの列に2つのテーブルを内部結合しようとしています。 DB側からは、私が議論したくないものなのでマッピングはありません。HQLを使用した内部結合

INNER JOINを使用してHQLクエリを実行し、ROLEオブジェクト/結果を取得したいとします。ここに私のHQLは、これまで

session.createQuery( "ROLEから役割INNERがrole.id = involvement.roleid ON関与などの関与を登録しようとして、WHERE involvement.id = X")。リストです

( );

「ON」はHQLでは使用できません。どうやって明示的にHibernateにこの列のJOINを伝えるのですか?

私は役割、関与role.ID = involvement.role_idとして関与とinvolvement.id = 27251352

としての役割からroleSpecを選択1あまりにも

の下にしようとしたが、 ROLEが例外的にマップされていません。

+0

代わりにSQLを使用します。 HQLは、主に適切な関係とエンティティのマッピングがある場合にのみ機能します。 (あなたはまだThetaスタイルの結合を行うことができますが、そうすることをお勧めしません) –

+0

Hibernateを使ってSQLを実行する方法を教えてください。アプリケーションの残りはHibernateを広く使用します。 – Reddy

+0

Hibernateのリファレンスでネイティブクエリを検索する –

答えて

14

ROLEが実際にマッピングされたエンティティであることを確認してください。さらに、 "ON"を実行する必要はありません - hibernateは結合列を知っています(私はJPAでこれを定義する方法を知っています)ので、ステートメントで提供する必要はありません。 それがあるべき -

session.createQuery("from Role as role INNER JOIN Involvement as involvement WHERE involvement.id = X").list(); 

私はあなたがROLEテーブルにマップされたロールクラス、およびテーブルをInvolementにマップ関与クラスを持っていると仮定します。
誤ってテーブル名を使用した可能性があります。そのため、「マップされていません」というエラーが表示されます。
前回私はHQL(JPA-QLではありません)を書いていましたが、参考として以下のlinkを使用しました。

関連する問題