hsql中 count(distinct key1||key2) 提示expecting CLOSE, found '||',
嵌套查询更是不行,NND

解决方案 »

  1.   

    hql语言并不强大.建议在复杂的sql语句直接用jdbc
      

  2.   

    我以前的教训
    select round(sysdate-tp03.tpc003) from Tp03 as tp03 where tp03.tpa001='1'// 包错
    对应的sql是:
    select round(sysdate-'1') from dual //通过死活hql我就写不出来.最后没信心了.用jdbc
      

  3.   

    这些SQL都无法转化成对应的HQL。
    HIBERNATE本来就提供了native SQL的支持,并不要求你一定要用HQL的。
      

  4.   

    按说这也不是什么复杂的查询,更简单点的
    select count(*) from (select distinct key1,key2 from table1)
    或写成
    select count(distinct key1 || key2) from table1
    也算是很常用的统计查询了,这都不支持?
    没话说了...
      

  5.   

    而且,round(sysdate-'1') 还可以有变通的写法,但这个却也实在想不出来还能怎么变通,不行只能 select distinct key1,key2 from table1 后计算结果集的大小了暂时不考虑掺杂native sql
      

  6.   

    HQL的一个特点就是要跨数据库。
    可是你这些写法都是数据库相关的,因此被HQL枪毙也是有道理的。
      

  7.   

    听上去似乎有点道理,但
    select count(*) from (select distinct key1,key2 from table1)
    可是数据库不相关的吧,很多数据库都支持
    还有,hql都支持 
    select count(distinct key1) from table1
    select key1 || key2 from table1
    那count(distinct key1 || key2) 也应该没理由不支持被枪毙了也可以,但应该也有替换的写法或其他的什么方式达到相同的目的,也许有,只是我没找到
      

  8.   

    HQL被设计成面向对象的查询语言,可是咱们用的关系式数据库却不是面向对象的。
    有些SQL到HQL的转化的确比较难以实现。不过作者还是留了一个口子,你可以用Native SQL。没必要在HQL上吊死,就用Native SQL吧,呵呵