Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa “标准查询”;其中;“在”时丢失;orderBy";应用_Jpa_Jpa 2.0_Eclipselink - Fatal编程技术网

Jpa “标准查询”;其中;“在”时丢失;orderBy";应用

Jpa “标准查询”;其中;“在”时丢失;orderBy";应用,jpa,jpa-2.0,eclipselink,Jpa,Jpa 2.0,Eclipselink,我正在学习如何在JPA2.0中使用CriteriaQuery,遇到了一个难题。我的应用程序使用用户的交互式输入构建查询。单击列标题时,将应用orderBy术语。当他们在列标题正下方的文本字段中键入时,将对该列应用筛选器 这样做,我可以使用orderBy()方法,它可以用于任何数量的术语。我可以使用where()方法,它可以工作。当我同时使用两者时,where()谓词将被忽略 如果我颠倒调用CriteriaQuery对象的顺序,则没有什么区别。如果应用了排序,则过滤器将不再工作 我曾尝试在web上

我正在学习如何在JPA2.0中使用CriteriaQuery,遇到了一个难题。我的应用程序使用用户的交互式输入构建查询。单击列标题时,将应用orderBy术语。当他们在列标题正下方的文本字段中键入时,将对该列应用筛选器

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

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

我曾尝试在web上查找两种方法都用于同一查询的示例,但没有找到一种

知道我做错了什么吗?文档中有我遗漏的东西吗


这是使用Derby via eclipselink 2.2.0。

很抱歉,我发现了这个bug。这在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();
CriteriaBuilder qb=em.getCriteriaBuilder();
CriteriaQuery cq=qb.createQuery(Location.class);
Root=cq.from(Location.class);
//测试用例
cq.where(qb.like(qb.upper(root.get(Location.name)),“C%”);
orderBy(qb.desc(root.get(Location.id));
TypedQuery q=em.createQuery(cq);
q、 setFirstResult(0);
q、 setMaxResults(20);
list=q.getResultList();

您可以发布用于构造查询的代码吗?