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