【问题标题】:JPA Postgres float mapping/orderingJPA Postgres 浮点映射/排序
【发布时间】: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.2

float 属性在 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


【解决方案1】:

对不起您的努力:(。我再次查看了域模型。他们将分数保存在两列中。一列是浮点数,另一列是 varchar。排序操作对 varchar 列进行排序,所以字母数字排序没问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 2015-01-16
    • 1970-01-01
    相关资源
    最近更新 更多