求助一个HQL查询 带where 条件 加排序的问题

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

谢谢

10 个解决方案

#1


该回复于2008-08-01 05:09:33被版主删除

#2


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

另外,检查数据库contentOrder是不是为null

#3


你这里用了多表链接吧

用离线查询


   Criteria c = createCriteria(Content.class);
   c.createAlias("cartoon","car").add(Restrictions.eq("car.cartoonId","?"); //传递进来的值
   c.addOrder(Order.desc("contentOrder"));  //你要排序的字段名
   List temp = c.list();

#4


谢谢楼上两位的热心回答,
如果用
from Content as c order by c.contentOrder 
from Content as c where c.cartoon.cartoonId = ?
都可以查出值来的
cool_scorpion 说的contentOrder 类型是 Integer类型 是可以排序的
或者我换成主键去排序,得出结果list也是为空

如果映射关系错了的话上面那两条语句应该会有问题吧。

由于底层封装了对DAO的操作,没有封装Criteria类的操作,希望可以同过HQL语句解决。

#5


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

#6


        顺便把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;
}

#7


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

#8


引用 2 楼 cool_scorpion 的回复:
这样的写法是对的啊, 
估计是 没映射好吧,检查一下 Content 确实有个属性 contentOrder,而且确认一下 contentOrder 是基本类型,可以用来排序的。 

另外,检查数据库contentOrder是不是为null

#9


谢谢楼这么多位 热心的回答
找到问题了
是不可以用*号的问题
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

就可以查出来了
谢谢热心的各位

#10


写法是不对的

#1


该回复于2008-08-01 05:09:33被版主删除

#2


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

另外,检查数据库contentOrder是不是为null

#3


你这里用了多表链接吧

用离线查询


   Criteria c = createCriteria(Content.class);
   c.createAlias("cartoon","car").add(Restrictions.eq("car.cartoonId","?"); //传递进来的值
   c.addOrder(Order.desc("contentOrder"));  //你要排序的字段名
   List temp = c.list();

#4


谢谢楼上两位的热心回答,
如果用
from Content as c order by c.contentOrder 
from Content as c where c.cartoon.cartoonId = ?
都可以查出值来的
cool_scorpion 说的contentOrder 类型是 Integer类型 是可以排序的
或者我换成主键去排序,得出结果list也是为空

如果映射关系错了的话上面那两条语句应该会有问题吧。

由于底层封装了对DAO的操作,没有封装Criteria类的操作,希望可以同过HQL语句解决。

#5


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

#6


        顺便把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;
}

#7


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

#8


引用 2 楼 cool_scorpion 的回复:
这样的写法是对的啊, 
估计是 没映射好吧,检查一下 Content 确实有个属性 contentOrder,而且确认一下 contentOrder 是基本类型,可以用来排序的。 

另外,检查数据库contentOrder是不是为null

#9


谢谢楼这么多位 热心的回答
找到问题了
是不可以用*号的问题
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

就可以查出来了
谢谢热心的各位

#10


写法是不对的