2010-11-23 5 views
0

HQLを使用したサブクエリのサポートが不十分であることを読んだことがありますが、このSQLクエリをHQLで実装できるかどうかは誰にでも分かりますか?サブクエリを使用したSQLからHQLへ

私はすでにいくつかのテストを行ってきましたが、私は正しい道にいる場合は成功しません...分からない...

SQL(作業)

 

    SELECT 
    foo.id as fooId, 
    foo.name AS fooName, 
    chan.name AS chanName, 
    (SELECT DISTINCT 
     foo_lang.VALUE 
    FROM 
     foo_lang 
    WHERE 
     foo_lang.foo_id = fooId AND 
     foo_lang.lang_id = 1) as EN 
    FROM 
     foo 
    INNER JOIN chan ON foo.chan_id = chan.id 
 

HQL( )

 

select new 
    Map(o.id as id, 
     o.name as fooName, 
     c.name as chanName, 
     (select fl.value from foo_lang fl where fl.id.fId = id and fl.id.lId = 1) as EN) 
from 
    foo o 
    left join o.chan c 
 

動作しないことができます:

org.hibernate.TypeMismatchException:binarの左右の手の側面をy論理演算子は互換性がありませんでした[big_decimal:component [lId、rId]

サブクエリについてですか?

ありがとうございます。

+0

私は2つのオープンブラケットを参照して、一つだけ近い:あなたはfoo_langにFOOに参加する場合は私の知る限り、論理的には、このように、同じになります。それを修正して試しましたか? – Genius

+0

ありがとうございます。クロージングブラケットが追加されましたが、問題は解決しません。 – foxtrot

+0

もう1つ質問:この式のfooIdは何ですか:foo_lang.foo_id = fooId AND。 サブクエリが複数の行を返す場合はどうなりますか?出来ますか? – Genius

答えて

0

私は少し異なるオブジェクトであなたのケースを再現しようとしましたが、私はあなたがなぜこのサブクエリが必要なのかを理解していません。

SELECT 
o.id, 
o.name as fooName, 
c.name as chanName, 
fl.value as EN 
FROM foo AS o 
LEFT JOIN o.chan AS c 
LEFT JOIN o.foo_lang AS fl WITH fl.lang_id = 1 
+0

あなたは男です! :)ありがとう。 – foxtrot

関連する問題