2011-02-08 7 views
0

私はかなり複雑なJPQLステートメントを作成しようとしていますが、結果は別のテーブルの値に基づいてソートされます。私はMySQLがどのように見えるかを知っていますが、私はそれをJPQLに変換する手助けが必要です。ここに相当するSQLがあります:複雑なJPQL ORDERステートメント

SELECT o.* FROM Observation o 
LEFT JOIN Obs_Event p 
ON p.Event_ID = o.Event_ID 
LEFT JOIN Event_Set ppp 
ON ppp.Event_ID = o.Event_ID AND ppp.Event_Set_ID = o.Event_Set_ID 
WHERE o.Individual_ID = <some id> 
AND o.Observation_Date = <a date value> 
ORDER BY ppp.Seq_Num ASC 

これを行う方法についての助けがあれば幸いです。具体的に私はこの部分で問題を抱えているように見える:

ON ppp.Event_ID = o.Event_ID AND ppp.Event_Set_ID = o.Event_Set_ID 

だから、これまで私はこれを試してみた:

 Query q= em.createQuery("select o " + 
       " from Observation as o " + 
       " join o.eventID p" + 
       " join p.eventSetCollection ppp " + 
       " where o.individualID = :indiv " + 
       " AND o.observationDate = :d " + 
       " AND o.eventID = ppp.event " + 
       ""; 

私は

WHERE ... 
AND o.eventSetID = ppp.eventSet 

のようなものを追加しようとすると...それは単に機能しません。生成されたSQLを見ると、ppp.eventSetは単に無視されるようです。

提案?

+0

エンティティはどのようにマップされていますか? – axtavt

答えて

0

私のエンティティ関係を尋ねるコメントを投稿した最初のおかげです。それは私に物事を詳しく観察し、何が間違っているのかを理解することを余儀なくさせました。

JPAで私が今よりも悪い時には、実際のオブジェクトではなくレコード/オブジェクトの主キーのように、o.eventIDプロパティを実際のIntegerに設定しました。したがって、上記のJPQLで、私は実際には次の文で整数にオブジェクトをマップしようとしている:

とo.eventID = ppp.event

は正しい文である判明:

 Query q= em.createQuery("select o " + 
       " from Observation as o " + 
       " join o.eventID p" + 
       " join p.eventSetCollection ppp " + 
       " where o.individualID = :indiv " + 
       " AND o.observationDate = :d " + 
       " AND o.eventID= ppp.event.eventID" + 
       " order by ppp.seqNum ASC" + 
       ""); 

実際にオブジェクトに移動するには、Observationクラスの関係を最終的に変更する必要がありますが、これはピンチで動作します。

関連する問題