如何在hibernate上指定Double的精度?
我尝试从hibernate注释创建一个表。 我需要一个Double类型的列,其长度指定为:(10,2)。 所以SQL语法显示如下:
... DOUBLE(10,2) ....
我试过这样做:
@Column(length = 10, precision = 2) ...
但是当我查看我创建的表时,没有指定Double列的长度。 hibernate是否有解决方案或是否需要手动更改表配置?
谢谢!
仅当使用字符串值列时,Column批注的length
元素才适用 。 在您的情况下,您应该使用precision
和scale
元素。
@Column(precision=10, scale=2)
以下是规范对它们的描述:
int
–precision
– (可选)十进制(精确数字)列的精度。 (仅在使用十进制列时适用。)int
–scale
– (可选)十进制(精确数字)列的比例。 (仅在使用十进制列时适用。)
参考
- JPA 1.0规范
- 第9.1.5节“列注释”
@Column(name="Price", columnDefinition="Decimal(10,2) default '100.00'")
在JPA中设置列的默认值
您还可以使用hibernatevalidation器API中的@Digits,它实现了javax.validation Bean Validation标准
@Digits(integer = 10 /*precision*/, fraction = 2 /*scale*/)
来自Javadocs
带注释的元素必须是可接受范围内的数字。支持的类型是:
- BigDecimal的
- 的BigInteger
- 为CharSequence
- 的BigInteger
- byte,short,int,long及其各自的包装类型
null元素被认为是有效的
使用@Type (仅在Hibernate中):
@Column(precision = 5, scale = 4) @Type(type = "big_decimal") private double similarity;
将导致定义(PostgreSQL,Oracle):
similarity numeric(5, 4), similarity number(5, 4)