web-dev-qa-db-ja.com

HQLを使用した内部結合

1つの列で2つのテーブルを内部結合しようとしています。 DB側からは、説明したくないのでマッピングはありません。

INNER JOINを使用してHQLクエリを実行し、ROLEオブジェクト/結果を取得したいと考えています。

ここに私のhqlがあります

session.createQuery( "ROLEをロールとしてINNER JOIN INVOLVEMENTを関与としてON role.id =関与.roleid WHERE

ONはHQLでは利用できないようです。この列でのみHibernateをJOINに明示的に指示する方法.

以下も試してみました

rOLEからroleSpecをロールとして選択し、INVOLVEMENTを巻き込みWHEREロールとして選択します。ID= includement.role_idおよび

しかし、例外でマップされていないROLEを取得しています。

10
Reddy

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

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

RoleクラスがROLEテーブルにマップされ、InvolvementクラスがInvolementテーブルにマップされていると想定します。
テーブル名を誤って使用した可能性があります。これが「マップされていない」エラーが発生する理由です。
最後にHQLを作成しました(JPA-QLではありません)。参照として次の link を使用しました。必要なすべての情報を提供します。

16
Yair Zaslavsky