Пользовательский порядок по строковому параметру в HQL - PullRequest
5 голосов
/ 22 сентября 2011

У меня был HQL-запрос, подобный этому:

Query query = session.createQuery("from User as user where user.joined!=null order by user.joined desc");

Как установить переменное свойство User в качестве порядка сортировки для моего запроса?Мое решение:

String order = "user.joined";
Query query = session.createQuery("from User as user where user.joined!=null order by :order desc").setString("order", order);

не дает упорядоченного результата запроса.

Ответы [ 2 ]

3 голосов
/ 22 сентября 2011

Используйте критерий запроса .

List<User> users = session.createCriteria(User.class)
    .add(Restrictions.isNotNull("joined"))
    .addOrder(Order.desc(order))
    .list();

Или, используя HQL:

Query query = session.createQuery("from User as user where user.joined!=null order by user." + order + " desc");
1 голос
/ 26 марта 2014

Во втором запросе при использовании этого вызова метода:

[Hibernate Query object].setString("order", order)

Вы пытаетесь связать имя столбца как параметр, что невозможно.

Что такоеПараметр (для этой цели) следует определению параметров SQL, которое также является определением параметра, используемым в JDBC API PreparedStatement .

Для динамического построения запроса (помимо его параметров) существуют другие решениякак те, которые указал Мэтт Болл.Вы также можете увидеть Использование подготовленного оператора и переменной связывания Order By в Java с драйвером JDBC .

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