如何在休眠中指定双精度?
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
元素仅在使用字符串值列时适用。在您的情况下,您应该使用 precision
和 scale
元素。
@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 元素被认为是有效的
【讨论】:
以上是关于如何在休眠中指定双精度?的主要内容,如果未能解决你的问题,请参考以下文章