2010-11-23 4 views
0

Я читал об отсутствии поддержки подзапросов с HQL, но в любом случае кто-нибудь мог сказать мне, может ли этот SQL-запрос быть реализован с помощью HQL?SQL to 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: левая и правая рука сторон БИНАР y были несовместимы [big_decimal: component [lId, rId]]

Есть о подзапросах или что-то еще?

Заранее спасибо.

+0

Я вижу два открытых скобок, но только один близко. Вы пытались это исправить? – Genius 2010-11-23 20:47:01

+0

Спасибо. Добавлена ​​скобка закрытия, но проблема сохраняется. – foxtrot 2010-11-24 09:48:24

ответ

0

Я попытался воспроизвести вам случай с немного разными объектами, и я не понимаю, зачем вам этот подзапрос. AFAIK, логически это будет то же самое, если вы присоединитесь foo_lang к Foo, как это:

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 
Смежные вопросы