首页 > 解决方案 > 为什么休眠查询语言不支持 HQL 中的排序规则?

问题描述

我将使用数据库排序规则按列对表数据进行排序。

SELECT *
    FROM country
    ORDER BY code COLLATE utf8_swedish_ci DESC;

但是当我尝试使用 HQL 获取表数据时,由于 HQL 不支持此功能,因此出现异常。那么有没有办法和sql一样呢?而且虽然hibernate不支持所有的sql特性但是可能不支持collat​​e特性是有逻辑的原因的。为什么休眠 HQL 不支持查询级别的整理功能?

标签: javaspringhibernatehql

解决方案


我们可以通过覆盖数据库方言的 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);
    }

推荐阅读