from Content as c where c.cartoon.cartoonId = ? order by c.contentOrder
查出来的list为空
如果去掉order by c.contentOrder 就可以查出来
网上查了好多资料
都没见这样写法
求教一下该怎么写才对呢?谢谢

解决方案 »

  1.   

    这样的写法是对的啊,
    估计是 没映射好吧,检查一下 Content 确实有个属性 contentOrder,而且确认一下 contentOrder 是基本类型,可以用来排序的。另外,检查数据库contentOrder是不是为null
      

  2.   

    你这里用了多表链接吧用离线查询
       Criteria c = createCriteria(Content.class);
       c.createAlias("cartoon","car").add(Restrictions.eq("car.cartoonId","?"); //传递进来的值
       c.addOrder(Order.desc("contentOrder"));  //你要排序的字段名
       List temp = c.list();
      

  3.   

    谢谢楼上两位的热心回答,
    如果用
    from Content as c order by c.contentOrder 
    from Content as c where c.cartoon.cartoonId = ?
    都可以查出值来的
    cool_scorpion 说的contentOrder 类型是Integer类型 是可以排序的
    或者我换成主键去排序,得出结果list也是为空如果映射关系错了的话上面那两条语句应该会有问题吧。由于底层封装了对DAO的操作,没有封装Criteria类的操作,希望可以同过HQL语句解决。
      

  4.   

    查询的时候 配置List 的排序字段为c.contentOrder,是查询出正确的结果的 
      

  5.   

            顺便把DAO层的操作代码也贴一贴
    public List findListByParam(String hql, Object... o)
    {
    List list = new ArrayList();
    if (o != null)
    {
    list = this.getHibernateTemplate().find(hql, o);
    }
    else
    {
    list = this.getHibernateTemplate().find(hql); }
    return list;
    }
      

  6.   

    在后面加上排序关键字试试看行不.
    比如:order by id desc,我平时是这样写的.
    我知道在sql里面是可以去掉后面的desc.因为sql有个默认的排序.
      

  7.   

    谢谢楼这么多位 热心的回答
    找到问题了
    是不可以用*号的问题
    select c.字段,c.字段,c.字段,c.字段 from Content as c where c.cartoon.cartoonId = ? order by c.contentOrder 转换成sql也一样
    不能用*也要指定字段
    select * from where cartoonId = ? order by contentOrder就可以查出来了
    谢谢热心的各位