如何在休眠时指定Double的精度?

art*_*rxe 31 java hibernate jpa

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

... DOUBLE(10,2) ....
Run Code Online (Sandbox Code Playgroud)

我试过这样做:

@Column(length = 10, precision = 2) ...
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

Pas*_*ent 73

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

@Column(precision=10, scale=2)
Run Code Online (Sandbox Code Playgroud)

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

  • int- precision- (可选)十进制(精确数字)列的精度.(仅在使用十进制列时适用.)
  • int- scale- (可选)十进制(精确数字)列的刻度.(仅在使用十进制列时适用.)

参考

  • JPA 1.0规范
    • 第9.1.5节"列注释"

  • 很好.它适用于"BigDecimal"Java类型.但是"双"并没有.我只改变了类型,现在工作:). (6认同)
  • @artaxerxe 知道它如何适用于“java.lang.Double”吗?:) (2认同)

Kri*_*ris 16

@Column(name="Price", columnDefinition="Decimal(10,2) default '100.00'")
Run Code Online (Sandbox Code Playgroud)

在JPA中设置列的默认值


Fea*_*ena 5

您还可以使用@Digits实现 javax.validation Bean 验证标准的 hibernate validator API

@Digits(integer = 10 /*precision*/, fraction = 2 /*scale*/)
Run Code Online (Sandbox Code Playgroud)

来自 Java 文档

注释的元素必须是可接受范围内的数字支持的类型有:

  • 大十进制
  • 大整数
  • 字符序列
  • 大整数
  • byte、short、int、long 及其各自的包装类型

null 元素被认为是有效的


zer*_*021 5

使用@Type(仅在Hibernate中):

@Column(precision = 5, scale = 4)
@Type(type = "big_decimal")
private double similarity;
Run Code Online (Sandbox Code Playgroud)

将导致定义(PostgreSQL、Oracle):

similarity numeric(5, 4),
similarity number(5, 4)
Run Code Online (Sandbox Code Playgroud)