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