select id from subject s where s.levels=? and s.field_by_code=? and s.field_by_project=? ORDER BY rand() limit ?
把这个sql改为hql该怎么写,谢谢

解决方案 »

  1.   

    应该可以
    指定为sqlsever的方言测试下
      

  2.   

    你以为 HQL 是万能的?使用原生 SQL 查询吧!
      

  3.   

    from subject where levels = xxx and field_by_code = xxx and s.field_by_project = xxx ORDER BY rand()
    大致这么写。
    分页的话用Query接口的setFirstResult(int start)方法和setMaxResults(int end)方法,不建议手写使用limit,因为limit不是所有数据库都支持。使用上述两个方法设置起止点的话hibernate会根据配置中的数据库方言来转换为适合此数据库的分页部分sql。
      

  4.   


    Query query = this.getSession().createQuery(queryString);
    query.setFirstResult(startRow);  
    query.setMaxResults(pageSize);//limit 要在这里表示  startRow = 0 ,pageSize = limit 
    limit 我在pgsql用过
      

  5.   

    楼主要实现的是 rand() 函数,也就是从表中随机选取一定数量的记录,这涉及数据库特有的语法,在 HQL 中是做不到的!