我正在学习如何在JPA 2.0中使用CriteriaQuery并遇到麻烦。我的应用程序使用来自用户的交互式输入构建查询。单击列标题时,将应用orderBy术语。当他们键入列标题正下方的文本字段时,会对该列应用过滤器。
这样做,我可以使用 orderBy()方法,它适用于任意数量的术语。我可以使用 where()方法,它可以工作。当我同时使用它们时, where()谓词将被忽略。
如果我颠倒了调用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();