Почему язык запросов hibernate не поддерживает сортировку в HQL? - PullRequest
0 голосов
/ 01 октября 2019

Я собираюсь отсортировать данные таблицы по столбцу с использованием параметров сортировки базы данных.

SELECT *
    FROM country
    ORDER BY code COLLATE utf8_swedish_ci DESC;

Но когда я пытаюсь получить данные таблицы с помощью HQL, это исключение при получении, поскольку HQL не поддерживает эту функцию. Так есть ли способ сделать это так же, как SQL? И хотя hibernate не поддерживает все функции sql, но может быть, есть логическая причина не поддерживать функцию сортировки. Почему hibernate HQL не поддерживает функцию сортировки на уровне запросов?

Ответы [ 2 ]

0 голосов
/ 02 октября 2019

Мы можем сделать это путем переопределения метода renderOrderByElement диалекта базы данных

 @Override
    public String renderOrderByElement(String expression, String collation, String order, NullPrecedence nulls)
    {
        expression = (new StringBuilder(expression)).append(" collate  'utf8_swedish_ci'").toString();
        return super.renderOrderByElement(expression, collation, order, nulls);
    }
0 голосов
/ 02 октября 2019

Вы можете сделать это с помощью FluentJPA :

public List<Country> getCountries() {
    FluentQuery query = FluentJPA.SQL((Country country) -> {

        SELECT(country);
        FROM(country);
        ORDER(BY(COLLATE(country.getCode(), "utf8_swedish_ci")).DESC());
    });

    return query.createQuery(em, Country.class).getListResult();
}
...