【问题标题】:How to specify Double's precision on hibernate?如何在休眠中指定双精度?
【发布时间】:2023-03-29 17:29:01
【问题描述】:

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

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

我已经尝试过这样做:

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

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

谢谢!

【问题讨论】:

  • 听起来你想要 Decimal 数据类型。我认为浮点数/双精度数只有精度参数。

标签: java hibernate jpa


【解决方案1】:

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

@Column(precision=10, scale=2)

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

  • int - precision - (可选)小数的精度(精确 数字)列。 (仅适用于 使用小数列。)
  • int - scale - (可选)小数的小数位数(精确数字) 柱子。 (仅适用于小数 列。)

参考文献

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

【讨论】:

  • 非常好。它适用于“BigDecimal”Java 类型。但与“双”没有。我只改变了类型,现在可以工作了:)。
  • @artaxerxe 知道它如何适用于“java.lang.Double”吗? :)
  • @plutonium1991 如果你需要精确度,你可能需要使用BigDecimal 来代替......这就是为什么他们可能不允许在双打上使用这个注释......这里解释-> stackoverflow.com/a/3413493
  • @plutonium1991 是的,要么添加 Kris 回答的自定义 columnDefinition,要么查看我对 Hibernate 的回答。
【解决方案2】:
@Column(name="Price", columnDefinition="Decimal(10,2) default '100.00'")

Setting default values for columns in JPA

【讨论】:

    【解决方案3】:

    使用 @Type(仅在 Hibernate 中):

    @Column(precision = 5, scale = 4)
    @Type(type = "big_decimal")
    private double similarity;
    

    将导致定义(PostgreSQL、Oracle):

    similarity numeric(5, 4),
    similarity number(5, 4)
    

    【讨论】:

      【解决方案4】:

      您还可以使用 hibernate 验证器 API 中的 @Digits,它实现了 javax.validation Bean 验证标准

      @Digits(integer = 10 /*precision*/, fraction = 2 /*scale*/)
      

      来自 Javadocs

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

      • 大十进制
      • 大整数
      • 字符序列
      • 大整数
      • 字节,短,整数, long,以及它们各自的包装类型

      null 元素被认为是有效的

      【讨论】:

        猜你喜欢
        • 2011-02-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多