java - 为什么 Hibernate 会这样对我的列表进行排序?
问题描述
我想使用 Hibernate 的Criterias对列表进行排序,但不了解框架如何对结果进行排序。我有一个要查询和排序的字符串列表。值如下:
- 麦高芬超级
- 麦高芬超级
- 麦格芬通电
- 麦高芬 1
- 麦高芬超级
- 麦高芬 2
- 麦高芬超级
我想按升序对它们进行排序。我期待这个结果: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 的工作方式时,我是否遗漏了什么?我怎样才能得到我想要的结果?
解决方案
进行排序的不是 Hibernate ORM,而是您的数据库。当您使用条件时,Hibernate ORM 将创建向 SQL 添加适当order by
子句的查询。
根据您使用的数据库,通常有一种方法可以定义排序规则并指定字符串和字符的排序方式。
例如,在 PostgreSQL 中,您可以在创建表时定义它:
CREATE TABLE test1 (
a text COLLATE "de_DE",
b text COLLATE "es_ES",
...
);
推荐阅读
- kubernetes - 来自守护程序的错误响应:获取 https://armdocker.rnd.se/v1/_ping:未找到
- pickle - 在python3中使用pickle.load()加载pickle文件时出现TypeError:jupyter notebook
- android - 如何将 JAR 依赖项包含到 AAR 库 gradle 3.0 以上
- java - 分离正则表达式组
- ios - React Native Firebase 存储上传失败并出现未知错误
- android - 将旧项目迁移到 Android Plugin for Gradle 3.1.2
- java - javax.validation 和组合注解
- sql - SQL查询IP地址有的带0
- xamarin - Xamarin 表单中的品牌
- c# - 无法将类型“字符串”隐式转换为“System.Collections.Generic.IEnumerable”
'