【发布时间】:2012-07-12 14:40:30
【问题描述】:
我们开发了一个使用 Postgres 数据库作为持久性介质的 Java EE 应用程序。我们的一些实体属性映射为浮点数。对这些列进行排序会产生以下结果:
分数 1.0 100.2 2.0 20.0 3.0我期待的结果是:
分数 1.0 2.0 3.0 20.0 100.2float 属性在 postgres 数据库中使用数据类型 float(8) 进行映射。使用以下普通 sql 查询排序按预期工作:
SELECT score FROM Evaluation ORDER BY score::float
也可以将列类型更改为“真实”。有什么方法(除了使用列定义)可以使用 jpa 完成这项工作吗?
【问题讨论】:
-
很奇怪,因为文档说:PostgreSQL 接受 float(1) 到 float(24) 作为选择真实类型,所以 float(8) 和 real 在其实同类型。 (postgresql.org/docs/9.2/static/…)
-
这听起来确实像您的列定义为
text(或varchar),请向我们展示CREATE TABLE 语句(或psql 中\dt命令的输出)。对真正的浮点列进行排序确实可以正常工作。见这里:sqlfiddle.com/#!1/d95f2/1 -
请显示您的 JPA @Entity 映射、您的表定义以及您请求数据排序的方式。
-
您有自定义域类型吗?请显示
\dT float命令在连接到运行此测试的同一数据库的 psql 中运行时的输出。注意大写字母“t”。 -
这很奇怪。我在家里的私人机器上创建了一个浮动列,并且排序按预期工作。明天@work 我会看看create table 语句。工作中的列被映射为 float ;)。我不认为问题属于 JPA,因为我的 sql 查询工具也显示了相同的结果。
标签: postgresql sorting jpa natural-sort