CriteriaQuery «где» теряется при применении «orderBy» - PullRequest
0 голосов
/ 19 августа 2011

Я учусь, как использовать CriteriaQuery в JPA 2.0, и столкнулся с проблемой. Мое приложение создает запрос с интерактивным вводом от пользователя. При щелчке заголовков столбцов применяется термин orderBy. Когда они вводятся в текстовое поле прямо под заголовком столбца, к этому столбцу применяется фильтр.

Делая это, я могу использовать метод orderBy () , и он работает для любого количества терминов. Я могу использовать метод , где () , и он работает. Когда я использую оба вместе, предикат where () игнорируется.

Если я переверну порядок вызова объекта CriteriaQuery, это не имеет значения. Если применяется сортировка, фильтр больше не работает.

Я пытался найти в Интернете примеры, где оба метода используются для одного и того же запроса, но не нашел.

Есть идеи, что я могу делать не так? Что-то я пропустил в документации?

Используется Derby через eclipselink 2.2.0.

1 Ответ

0 голосов
/ 19 августа 2011

Извините всех, я нашел ошибку.Это не было проблемой в 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();
...