如何在hibernate上指定Double的精度?

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

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

我试过这样做:

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

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

谢谢!

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

 @Column(precision=10, scale=2) 

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

  • intprecision – (可选)十进制(精确数字)列的精度。 (仅在使用十进制列时适用。)
  • intscale – (可选)十进制(精确数字)列的比例。 (仅在使用十进制列时适用。)

参考

  • 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)