什么 Postgres 类型将映射到休眠中 Float 类型的列?

Posted

技术标签:

【中文标题】什么 Postgres 类型将映射到休眠中 Float 类型的列?【英文标题】:What Postgres type would map to a column in hibernate of type Float? 【发布时间】:2013-01-11 23:03:52 【问题描述】:

什么 postgres 列类型会映射到基于 hibernate 的列中的 Java Float 类型?

我的旧 postgres 数据库中有 float(19),但如果启用了休眠模式验证,我会收到此错误消息。

Wrong column type in realtorprint.templatetype for column height.
Found: float8, expected: float4

有什么想法吗?我的列是 float(8) 而不是 float(19) 我可能可以在我们的旧数据库中进行更改。

【问题讨论】:

我希望您知道使用浮点数是一个坏主意(在 Java 和 Postgres 中)。由于它们的表示方式,您不一定要取回您输入的内容。使用BigDecimal(在Java 中)或decimal(在Postgres 中)是更好的选择。 floating-point-gui.de @a_horse_with_no_name 这不是一个普遍的坏主意;它们非常适合存储测量值和其他数量,其中精确表示不如效率重要,并且能够存储大量值范围内的值。不过,将它们用作货币是一个糟糕的主意。 我使用了一个浮点数,因为这个宽度/高度列映射到一个 PDF 宽度/高度单位,它基本上是一个浮点数。 【参考方案1】:

hibernate 如何将 Java 类型映射到 SQL 类型由Dialect 的子类控制,该子类对应于您的 RDBMS。具体使用哪一种可能取决于您的 Hibernate 和 Postgres 版本。

但我怀疑在大多数情况下,Java float 映射到 float(4),Java double 映射到 float(8)。

这是开源的,您可以获取代码并检查以确定您的情况发生了什么。

您也可以通过配置替换您自己的方言,尽管这不太合适。 (它适用于偶尔的错误修正。)

【讨论】:

以上是关于什么 Postgres 类型将映射到休眠中 Float 类型的列?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JPA 和休眠映射 Java/Kotlin 字符串数组和 Postgres SQL 数组

将休眠数据类型映射到混合类型存储过程的输出

postgres串行/大串行列的正确休眠ID生成器?

如何将Mysql中的位类型映射到休眠?

休眠缓慢以获取 Postgres 连接

格瑞斯 GORM。将映射添加到现有的休眠映射