CriteriaQuery“where”在应用“orderBy”时丢失

时间:2011-08-19 05:44:21

标签: jpa jpa-2.0 eclipselink

我正在学习如何在JPA 2.0中使用CriteriaQuery并遇到麻烦。我的应用程序使用来自用户的交互式输入构建查询。单击列标题时,将应用orderBy术语。当他们键入列标题正下方的文本字段时,会对该列应用过滤器。

这样做,我可以使用 orderBy()方法,它适用于任意数量的术语。我可以使用 where()方法,它可以工作。当我同时使用它们时, where()谓词将被忽略。

如果我颠倒了调用CriteriaQuery对象的顺序,它就没有区别。如果应用排序,则过滤器不再有效。

我尝试在网上查找两个方法在同一个查询中使用但未找到的示例。

知道我可能做错了吗?我在文档中遗漏了什么吗?

这是通过eclipselink 2.2.0使用Derby。

1 个答案:

答案 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();