为什么JPA"按升序排序"首先返回大写条目?

时间:2015-02-03 14:29:31

标签: java jpa sql-order-by

我有一个标准查询,其中包含以下代码:

CriteriaQuery<MyClass> criteria = cb.createQuery(MyClass.class);
Root<MyClass> root = criteria.from(MyClass.class);
criteria = criteria
        .where(cb.like(root.get(MyClass_.name), name + "%"))
        .orderBy(cb.asc(root.get(MyClass_.name)))
        .select(root);

为什么我的示例结果以这种方式排序:

abcdE
abcde

而不是这样:

abcde
abcdE

我该如何解决?

我希望首先返回完全小​​写的结果,但事实并非如此。

2 个答案:

答案 0 :(得分:1)

因为大写字母的char代码在小写字母之前。

答案 1 :(得分:1)

A-Z的Unicode字符点从65到90,而对于a-z,从97到122.因此,排序是从数据库开始的。

解决这个(因为这不是问题,但是你必须满足不同的要求),不要使用JPA对数据进行排序,而是使用Collections#sort手动排序并提供自定义Comparator<MyClass>