这个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>
这是怎么回事啊?

解决方案 »

  1.   

    left join q.answers a 
    后面要加条件  on  什么 = 什么
      

  2.   

    不管是左联还是右联,或者子查询,只要是两表或者多表连接查询,都应该有个依据的,例如子查询:
    select 别名.列名,别名.列名... from 表名 别名,表名,别名...where 别名.列名=别名.列名那么,“where 别名.列名=别名.列名” 就是这条联接查询的依据,因为A表中的一列等于B表中的一表,两表存在关系,所以才能连接查询
      

  3.   

    这是hql语句,选择的是对象,和表没有什么关系。至于where,on的问题,我原来用的是on q.qid=a.aid,但是用这个hibernate会报错:
    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查询的时候就出错了。