如何在休眠中指定双精度?

Posted

技术标签:

【中文标题】如何在休眠中指定双精度?【英文标题】:How to specify Double's precision on hibernate? 【发布时间】:2011-05-03 23:24:19 【问题描述】:

我尝试从休眠注释创建一个表。我需要一个 Double 类型的列,长度指定为:(10,2)。 所以 SQL 语法显示如下:

... DOUBLE(10,2) ....

我已经尝试过这样做:

@Column(length = 10, precision = 2) ...

但是当我查看我创建的表时,它没有指定 Double 列的长度。 hibernate 有解决方案还是需要手动更改表配置?

谢谢!

【问题讨论】:

听起来你想要 Decimal 数据类型。我认为浮点数/双精度数只有精度参数。 【参考方案1】:

列注释的length 元素仅在使用字符串值列时适用。在您的情况下,您应该使用 precisionscale 元素。

@Column(precision=10, scale=2)

以下是规范对它们的描述:

int - precision - (可选)小数的精度(精确 数字)列。 (仅适用于 使用小数列。) int - scale - (可选)小数的小数位数(精确数字) 柱子。 (仅适用于小数 列。)

参考文献

JPA 1.0 规范 第 9.1.5 节“列注释”

【讨论】:

非常好。它适用于“BigDecimal”Java 类型。但与“双”没有。我只改变了类型,现在可以工作了:)。 @artaxerxe 知道它如何适用于“java.lang.Double”吗? :) @plutonium1991 如果你需要精确度,你可能需要使用BigDecimal 来代替......这就是为什么他们可能不允许在双打上使用这个注释......这里解释-> ***.com/a/3413493 @plutonium1991 是的,要么添加 Kris 回答的自定义 columnDefinition,要么查看我对 Hibernate 的回答。【参考方案2】:
@Column(name="Price", columnDefinition="Decimal(10,2) default '100.00'")

Setting default values for columns in JPA

【讨论】:

【参考方案3】:

使用 @Type(仅在 Hibernate 中):

@Column(precision = 5, scale = 4)
@Type(type = "big_decimal")
private double similarity;

将导致定义(PostgreSQL、Oracle):

similarity numeric(5, 4),
similarity number(5, 4)

【讨论】:

【参考方案4】:

您还可以使用 hibernate 验证器 API 中的 @Digits,它实现了 javax.validation Bean 验证标准

@Digits(integer = 10 /*precision*/, fraction = 2 /*scale*/)

来自 Javadocs

注释元素必须是可接受范围内的数字支持 类型是:

大十进制 大整数 字符序列 大整数 字节,短,整数, long,以及它们各自的包装类型

null 元素被认为是有效的

【讨论】:

以上是关于如何在休眠中指定双精度?的主要内容,如果未能解决你的问题,请参考以下文章

如何在设备休眠时保持 GPS 处于全功率状态

使用 MariaDB/MySQL 在 Peewee 中指定 FLOAT 列精度

如何让 Dart 程序“休眠”1.6 秒

如何在 BigQuery 架构中设置 FLOAT 的精度

如何解释数据库中数字的精度和比例?

休眠:找到:浮点数,预期:双精度