首页 > 解决方案 > 为什么 Hibernate 会这样对我的列表进行排序?

问题描述

我想使用 Hibernate 的Criterias对列表进行排序,但不了解框架如何对结果进行排序。我有一个要查询和排序的字符串列表。值如下:

我想按升序对它们进行排序。我期待这个结果:1, 2, Mega, Mega, powerup, Super, Super.

但是,我最终得到:Mega, Mega, powerup, Super, Super, 1, 2

我首先认为这是因为ASCII Table,但是大写和小写被视为同一级别(尽管小写具有更高的 ASCII 地址)。


我在代码中看到的唯一可能相关的是这一行:

// I don't quite understand this line
criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);

除此之外,没有排序。我们打电话criteria.list()来得到我们的结果。


正常吗?在理解 Hibernate 的工作方式时,我是否遗漏了什么?我怎样才能得到我想要的结果?

标签: javahibernatesorting

解决方案


进行排序的不是 Hibernate ORM,而是您的数据库。当您使用条件时,Hibernate ORM 将创建向 SQL 添加适当order by子句的查询。

根据您使用的数据库,通常有一种方法可以定义排序规则并指定字符串和字符的排序方式。

例如,在 PostgreSQL 中,您可以在创建表时定义它

CREATE TABLE test1 (
    a text COLLATE "de_DE",
    b text COLLATE "es_ES",
    ...
);

推荐阅读