Java JPA:空值是如何排序的?

Java JPA:空值是如何排序的?,java,jpa,Java,Jpa,让我们假设一个简单的JPA查询,如: from MyObject where foo = ? order by bar desc 我们还假设bar是一个基本属性,如字符串或整数。最后,bar可以为null。bar==null的MyObject在列表中的什么位置出现?在顶部还是底部?这是特定于提供商和/或数据库的吗?这是特定于数据库的,据我所知,JPA规范没有涵盖它 示例:想象一下,您从DB中获取10个已排序的MLN值,然后在代码中决定以另一种方式对它们进行排序:这不是一项简单的任务=>这是数据

让我们假设一个简单的JPA查询,如:

from MyObject where foo = ? order by bar desc

我们还假设bar是一个基本属性,如字符串或整数。最后,bar可以为null。bar==null的MyObject在列表中的什么位置出现?在顶部还是底部?这是特定于提供商和/或数据库的吗?

这是特定于数据库的,据我所知,JPA规范没有涵盖它


示例:想象一下,您从DB中获取10个已排序的MLN值,然后在代码中决定以另一种方式对它们进行排序:这不是一项简单的任务=>这是数据库的任务。

特定于数据库。一些JPA供应商(例如DataNucleus JPA)提供了一个扩展来指定

NULLS FIRST | LAST

在每个ORDERBY子句中,我都在EJB规范中找到了答案:

适用于空值排序的SQL规则:即,所有空值必须出现在所有非空值之前 排序中的值或所有空值必须出现在排序中所有非空值之后,但不是 具体说明


因此,在这种情况下,基本上您必须手动进行排序,因为您无法确定数据库将在哪个位置返回null值。

这取决于SQL实现,但我的经验是,null排序就像它是空字符串一样。换言之,所有支持此概念的数据库都要优先于其他数据库;-)我们都知道,无论采用何种“标准”,很少有SQL是真正可移植的,因为RDBMS供应商支持他们认为合适的方式,我接受这种方式,因为它提供了答案和可能的解决方法。谢谢!我同意。在我们的案例中,我们讨论了2-5个条目,使用order by有助于分类,但我们可以在使用db进行预过滤后手动进行。不太好看,但是可以在每个数据库上工作。我在JPA(2.1)规范中找不到“ISNULL”。假设RDBMS支持,您可以将“FUNCTION”与ISNULL作为函数名放在其中。
为NULL定义了
,但这只能在
的WHERE
部分中使用,因此不起作用。