select id,sec_to_time(avg(time_to_sec(st)+ if(st <'06:00:00',86400,0))) from test
st 为time类型 
这个sql在hibernate里怎么写就怎么报错!

解决方案 »

  1.   

    select id,sec_to_time(avg(time_to_sec(st)+ if(st <'06:00:00',86400,0))) from test 
    估计if这个函数hibernate不支持
      

  2.   

    你要看看你要写的是hql还是sql,sql语句能用的hql不一定能用。
    也可以在hibernate里绕过hql而运行sql语句query = session.createSQLQuery(sql)
      

  3.   

    query = session.createSQLQuery(sql)我试过了,但还是报错啊
      

  4.   

    问一下sec_to_time这个不是SQL带的功能函数吧? 如果不是when: 
     1) 必须有明确的对象设计的时候才能用 Hibernate. 
     2) 数据库是用大量的存储过程实现的 不能用 Hibernate !!!  
     3) 如果多表查询, 也要慎重 Hibernate, 查询顺序不可预料(createSQLQuery(手写查
    询语句))   这是书上写的,我的理解是用存储函数的时候HB会发生不可预料的错误
      

  5.   

    hibeante语句有很多限制,你可以尝试用case when 语句取代if
      

  6.   

    你的sql语句能在数据中执行吗能在数据库中执行就可以用hibernate的原生sql   hibernateSession.createSQLQuery()
      

  7.   

    楼主这个帖子发了2遍,明显是 HQL 里面没有 sec_to_time 这种 fuction。那个帖子都给你回了。唉
      

  8.   

    用case when 没有问题滴
      

  9.   

    奇怪我用jdbc就没问题,用hibernate里case when 还是存在问题!