2011-08-19 93 views
0

我正在学习如何在JPA 2.0中使用CriteriaQuery并遇到一个障碍。我的应用程序使用用户的交互输入构建查询。点击列标题时,将应用orderBy项。当他们键入到列标题正下方的文本字段中时,将对该列应用过滤器。CriteriaQuery“where”在应用“orderBy”时丢失

这样做,我可以使用orderBy()方法,它适用于任何数量的术语。我可以使用其中()方法和它的工作原理。当我一起使用时,其中()谓词被忽略。

如果我颠倒被调用到CriteriaQuery对象的顺序,它没有什么区别。如果应用排序,则过滤器不再起作用。

我曾尝试在网络上查找两个方法都用于相同查询但未找到的示例。

任何想法我可能做错了什么?有没有我在文档中错过的东西?

这是通过eclipselink 2.2.0使用Derby。

+0

你可以发布你用来构造查询的代码吗? –

回答

0

对不起每个人,我发现了错误。这完全不是JPA中的问题 - if语句的一个微妙问题导致在引入排序术语时过滤条件被删除。让我们听听测试代码。

这是我准备发布的测试代码。有用。教科书。

CriteriaBuilder qb = em.getCriteriaBuilder(); 
    CriteriaQuery<Location> cq = qb.createQuery(Location.class);   
    Root<Location> root = cq.from(Location.class); 

    // test case 

    cq.where(qb.like(qb.upper(root.get(Location_.name)), "C%")); 
    cq.orderBy(qb.desc(root.get(Location_.id))); 
    TypedQuery<Location> q = em.createQuery(cq); 
    q.setFirstResult(0); 
    q.setMaxResults(20); 
    list = q.getResultList(); 
相关问题