【问题标题】:Why hibernate query language does not support collation in HQL?为什么休眠查询语言不支持 HQL 中的排序规则?
【发布时间】:2020-01-30 13:34:27
【问题描述】:

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

SELECT *
    FROM country
    ORDER BY code COLLATE utf8_swedish_ci DESC;

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

【问题讨论】:

  • 为什么不使用 Hibernate Native SQL 呢?
  • 是的,我可以做到,但我所有现有的代码都使用休眠查询或条件查询这就是为什么我想用 HQL 来做到这一点。
  • Hibernate 不支持 SQL 查询的所有功能。这样就可以考虑使用原生SQL了。
  • @flopcoder 显然它确实适用于Criteria queries
  • @Kayaman 是的,我可以。但是当涉及到连接查询时,我们可以使用这个链接吗?

标签: java spring hibernate hql


【解决方案1】:

您可以使用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();
}

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 2010-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多