Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么hibernate查询语言不支持HQL中的排序规则?_Java_Spring_Hibernate_Hql - Fatal编程技术网

Java 为什么hibernate查询语言不支持HQL中的排序规则?

Java 为什么hibernate查询语言不支持HQL中的排序规则?,java,spring,hibernate,hql,Java,Spring,Hibernate,Hql,我将使用数据库排序规则按列对表数据进行排序 SELECT * FROM country ORDER BY code COLLATE utf8_swedish_ci DESC; 但是,当我尝试使用HQL获取表数据时,它会出现异常,因为HQL不支持此功能。那么,有没有什么方法可以像sql一样做到这一点呢?尽管hibernate不支持所有的sql特性,但不支持collate特性可能是有逻辑原因的。为什么hibernate HQL在查询级别不支持collate特性 您可以通过以下方式完

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

SELECT *
    FROM country
    ORDER BY code COLLATE utf8_swedish_ci DESC;
但是,当我尝试使用HQL获取表数据时,它会出现异常,因为HQL不支持此功能。那么,有没有什么方法可以像sql一样做到这一点呢?尽管hibernate不支持所有的sql特性,但不支持collate特性可能是有逻辑原因的。为什么hibernate HQL在查询级别不支持collate特性

您可以通过以下方式完成:

public List getCountries(){
FluentQuery query=FluentJPA.SQL((国家)->{
选择(国家);
来自(国家);
订单(按(COLLATE(country.getCode(),“utf8_-swedish_-ci”)).DESC());
});
return query.createQuery(em,Country.class).getListResult();
}

我们可以通过覆盖数据库方言的renderderderbyelement方法来实现

 @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);
    }

为什么不使用Hibernate本机SQL?是的,我可以这样做,但我所有的现有代码都使用Hibernate查询或条件查询,这就是为什么我要使用HQL。Hibernate不支持SQL查询的所有功能。因此,你可以考虑使用原生SQL .@ FLopOpter,显然它和@ KayaMn一起工作,是的,我可以。但是当涉及到连接查询时,我们可以使用此链接吗?
 @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);
    }