有两个项目A,B。A较老,B进行中。现将A中的一个功能移到B中,A中用的是hibernate3.1,B中用的是hibernate3.3,
程序中的hql有用到count()
select count(distinct xx) from x ,y where xxx
于是移到B项目中问题来了 
3.2以后返回的long型的 现在没法更换jar文件 也没法修改以前的文件 只能改这个hql了 但是对这个不熟悉 不知道怎么改
试了一下 select a.num from (select count(distinct xx) num from x ,y where xxx) a
报语法错误 求教

解决方案 »

  1.   

    Configuration classicCfg = new Configuration(); 
    classicCfg.addSqlFunction( "count", new ClassicCountFunction()); 
    SessionFactory classicSf = classicCfg.buildSessionFactory(); 这是唯一的办法,如果这个代码你也不能在新的项目中加,那就真的杯具了。
      

  2.   

    看看能不能把那條HQL拆分成兩句吧,或者看有沒什么函數可以讓count(distinct xx)轉型了。
      

  3.   

    3.2以后返回的long型的 ?什么意思,hibernate3.3, 中的api一定兼容低版本的。
      

  4.   

    3.2返回LONG型? 之前返回的什么型? 必要的情况下必须改 谁要跟你说不行你就削他(我记得一直都是BigDecimal啊.. 实在不行的话 你貌似可以重写一个方言 然后指定什么属性变成什么属性把.. 不太晓得)
      

  5.   

    Configuration classicCfg = new Configuration(); 
    classicCfg.addSqlFunction( "count", new ClassicCountFunction()); 
    SessionFactory classicSf = classicCfg.buildSessionFactory(); 这是唯一的办法,如果这个代码你也不能在新的项目中加,那就真的杯具了。
      

  6.   

    哥解决了 哈哈 本着技术共享原则 将办法说出来 其实就是绕过count()函数 将count()改成0+convert(int,count()) 
    我这里用的是sybase数据库 其他的对应着改吧 大家如果遇到同样问题可以少花点时间了