Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么JPA会这样说;升序;首先返回大写的条目?_Java_Jpa_Sql Order By - Fatal编程技术网

Java 为什么JPA会这样说;升序;首先返回大写的条目?

Java 为什么JPA会这样说;升序;首先返回大写的条目?,java,jpa,sql-order-by,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(

我有一个带有以下代码的条件查询:

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
我怎样才能解决这个问题


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

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

A-Z的Unicode字符点从65到90,而A-Z的Unicode字符点从97到122。因此,排序是从数据库中进行的


要解决这个问题(因为这不是一个问题,而是您必须满足的一个不同要求),只需不使用JPA对数据进行排序,而是使用
集合进行手动排序#排序
,并提供一个自定义的
比较器

,我认为您会接受这种行为,不会寻找解决方案,考虑到可能的解决方案的实现成本。@AndreiI在Java上对数据进行排序比从数据库中检索数据没有问题。大多数应用程序都是这样做的,这种方法没有问题,而且实现成本也不高。我有不同的观点:尝试在内存中对大约10万条记录进行分页和排序,让几十个用户同时使用你的应用程序。@AndreiI这在现在不是问题。看起来你仍然生活在过去,那时你的服务器只有32 MB的RAM,还有更多的同步问题。好吧,让我们来计算一下:获取100.000条记录(实体及其关系)意味着100.000个实例*100字节/实例=10^7字节=9Mb(每个用户)。如果乘以并发用户的数量(假设100个用户),再加上整个框架+JVM的占用空间,那么我认为您可能会遇到一些问题。当然,我忽略了从硬盘加载数据并对数据进行排序所需的时间。@LuiggiMendoza我认为这真的取决于数据库和排序规则。。。而且,没有人说任何关于ASCII的事。此外,ASCII或Unicode中的代码与这些字母相同。@AndreiI Jens编辑了这篇文章,删除了有关ASCII的措辞。它不依赖于数据库排序,一旦数据到达Java,所有字符都在JVM使用的字符集中(依赖于实现)。Java中没有排序(不依赖于JPA实现),这只是数据库的任务。@AndreiI你错了。如果你有一个
列表
,那么你可以应用
集合#排序(列表,比较器)
,不管你是如何获得
列表的数据的:数据库,外部服务,直接从套接字读取,等等。@luigimendoza我想OP是在寻找JPA的解决方案(正如标题所说的),而不是为了在内存中对数据进行排序的清晰解决方案。但也许你是对的:OP没有看到这个解决方案。PS:当然,所有这些评论并不意味着冒犯任何人。在我的情况下,用Java排序不是一个选项,但第一部分回答了我的问题。
abcde
abcdE