如何在hibernate中指定双精度?

时间:2010-11-02 14:17:50

标签: java hibernate jpa

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

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

我试过这样做:

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

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

谢谢!

4 个答案:

答案 0 :(得分:70)

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

@Column(precision=10, scale=2)

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

  
      
  • int - precision - (可选)小数的精度(精确   数字)列。 (仅适用于   使用十进制列。)
  •   
  • int - scale - (可选)小数点(精确数字)   柱。 (仅适用于小数   使用了列。)
  •   

参考

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

答案 1 :(得分:14)

@Column(name="Price", columnDefinition="Decimal(10,2) default '100.00'")

Setting default values for columns in JPA

答案 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)