这个hql语句在hibernate编辑器里运行或者是在程序里运行一切都正常,可是用命名sql查询的时候就会报错:在关键字 'where' 附近有语法错误。
hql语句如下:
<code="sql">
select q.qid as qid,
q.askDate as askDate,
q.qtitle as qtitle,
q.qcontent as qcontent,
q.studyUser.uname as askUserName,
a.aid as aid,
a.acontent as askContent,
a.suid as answerUserId,
a.adate as answerDate
from Question q
left join q.answers a
where a.adate is null
or
a.adate in
(
select max(adate)
from Answer
group by question.qid
) </code>
这是怎么回事啊?
hql语句如下:
<code="sql">
select q.qid as qid,
q.askDate as askDate,
q.qtitle as qtitle,
q.qcontent as qcontent,
q.studyUser.uname as askUserName,
a.aid as aid,
a.acontent as askContent,
a.suid as answerUserId,
a.adate as answerDate
from Question q
left join q.answers a
where a.adate is null
or
a.adate in
(
select max(adate)
from Answer
group by question.qid
) </code>
这是怎么回事啊?
后面要加条件 on 什么 = 什么
select 别名.列名,别名.列名... from 表名 别名,表名,别名...where 别名.列名=别名.列名那么,“where 别名.列名=别名.列名” 就是这条联接查询的依据,因为A表中的一列等于B表中的一表,两表存在关系,所以才能连接查询
ERROR main org.hibernate.hql.PARSER - line 4:1: unexpected token: on
我在网上查找了资料,只要将
from Question q left join Answer a on q.qid=a.fk_qid
改成
from Question q left join q.answers a
就不会出现什么问题了,但是很无奈,这个hql语句放在hibernate编辑器或者程序里,它都一切ok,用命名sql查询的时候就出错了。