【发布时间】:2010-12-07 06:00:15
【问题描述】:
我有一个 double,我正试图将其保存到 postgres 数字列中。
我要保存的值是 151.33160591125488,我已经验证这实际上是 Hibernates 内部预插入接收到的参数。
但是数据库post insert中的值是151.331605911255,即四舍五入到12dp。
我知道我的列具有正确的比例,因为它是一个不受限制的数字列,并且以下...
update tbl set col=151.33160591125488
...达到预期效果。
所以罪魁祸首必须是 Hibernate 或 postgres-JDBC 驱动程序。
想法?
编辑:
org.hibernate.dialect.PostgreSQL方言:
registerColumnType( Types.DOUBLE, "float8" );
和
select cast (151.33160591125488 as float8);
=151.331605911255
因此 double 的默认行为是不正确的,因为它并不总是保存提供给它的 double。
有谁知道如何让休眠状态在 postgres 中使用“数字”列类型?
【问题讨论】:
-
您在休眠方面没有提供足够的详细信息。映射可以指定精度和比例。例如:
-
谢谢布赖恩,我会尝试这样做,但是这会降低我的应用程序的可扩展性,这一切都是因为休眠行为不端。 java double不限制,postgres不限制,为什么要休眠?
-
我尝试了 precision="30" scale="20" 这应该已经足够了,同样的结果。这么糟糕的建议。
-
仅供参考,“postgres”标签最近已替换为“postgresql”。请参阅meta.stackexchange.com/questions/25279/… 了解更多信息。我冒昧地重新标记了这个问题。
-
仅供参考,precision="12" scale="2" 对插入/更新没有影响,只有当 hibernate 也创建数据库时才使用它,以便它知道如何创建列。
标签: java hibernate postgresql jdbc