【发布时间】:2010-11-23 20:20:48
【问题描述】:
我读到了 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: 二元逻辑运算符的左右手不兼容 [big_decimal : component[lId,rId]]
是关于子查询还是别的什么?
提前致谢。
【问题讨论】:
-
我看到两个开括号,但只有一个闭括号。您是否尝试过修复它?
-
谢谢。添加了右括号,但问题仍然存在。
-
还有一个问题:这个表达式中的 fooId 是什么:foo_lang.foo_id = fooId AND。如果子查询将返回多行怎么办?有可能吗?