CriteriaQuery没有订购

时间:2013-04-22 16:52:34

标签: java hibernate jpa

我尝试按一个字段排序,但我在sql-debugger中看到sql不包含order-clause。

我的Criteria代码是

GenericDaoImpl<T> {
    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<T> cq = getCriteriaQuery(cb);
    Root<T> entity = getRoot(cq);
    cq.select(entity);
    TypedQuery<T> q = em.createQuery(cq);

    cq.orderBy(cb.asc(entity.get(order)));

public class GenericDaoClient extends GenericDaoImpl<Client> {
    @Override
    protected CriteriaQuery<Client> getCriteriaQuery(CriteriaBuilder cb){
            return (CriteriaQuery<Client>) cb.createQuery(Client.class);
    }

    @Override
    protected Root<Client> getRoot(CriteriaQuery cq){
            return cq.from(Client.class);
    }

比我打电话给我的dao获得有序列表:

dao.findAll(false,page*step+1,(page-1)*step+1,"conferm");

结果我的sql-query没有order子句:

select client0_.idCl as idCl218_ ... from Client client0_ limit ?, ?

1 个答案:

答案 0 :(得分:0)

在设置order by子句之前构造类型化查询。反过来这两条指令:

TypedQuery<T> q = em.createQuery(cq);
cq.orderBy(cb.asc(entity.get(order)));