JPA2 + Hibernate + Заказать по - PullRequest
       16

JPA2 + Hibernate + Заказать по

1 голос
/ 07 июня 2010

Можно ли (используя Hibernate и JPA2 Criteria Builder [1]) упорядочить по результату метода, а не по элементу сущности?

public class X {
    protected X() {}
    public String member;
    public String getEvaluatedValue() { // order by
        return "a status calculated with various members";
    }
}

Что я хочу добиться - упорядочить по результату getEvaluatedValue().Это возможно?

Спасибо заранее.

РЕДАКТИРОВАТЬ: Добавлен ответ.

Я не использую @Formular, но

EntityManager em = ...;
QueryBuilder builder = em.getQueryBuilder();
SomeQueryClass query = builder.createQuery(MyTargetClass.class);
query.orderBy(builder.asc(... some code...));

Я думаю, что это обычный JPA2, и, конечно, вы правы, нет шансов упорядочить по динамическим данным.Но мне может быть разрешено указывать некоторый блок упорядочения с помощью оператора if-else или любого другого (определенного моим QueryBuilder), не так ли?

[1] http://docs.jboss.org/hibernate/entitymanager/3.5/reference/en/html_single/#querycriteria

Ответы [ 2 ]

0 голосов
/ 04 октября 2010

Похоже, что это невозможно, по этой причине: когда запрос выполняется на уровне SQL, поле «EvaluatedValue» не рассчитывается. Он заполняется только позже (когда точно, я не знаю, это может зависеть от того, использует ли объект режим LAZY или нет). Объект JPA Query тесно связан с SQL, то есть с тем, что находится в базе данных.

Возможно, я получу несортированные результаты с помощью getResultList (), а затем вручную отсортирую их:

делает ваше EvaluatedValue типом, реализующим Comparable: см. Здесь

0 голосов
/ 07 июня 2010

Я не знаю, возможно ли это (если атрибут временный, то есть не имеет представления в базе данных, каким должен быть результат SQL?), Но, что более важно, какая разница между упорядочением по "some test " + member а member?Может быть, это просто пример, хотя ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...