【问题标题】:JPA @Size annotation for BigDecimalBigDecimal 的 JPA @Size 注释
【发布时间】:2014-01-21 09:00:15
【问题描述】:

如何为 MySQL DECIMAL(x,y) 列使用 @Size 注释?

我正在使用BigDecimal,但是当我尝试包含@Size max 时,它不起作用。这是我的代码:

@Size(max = 7,2)
@Column(name = "weight")
private BigDecimal weight;

【问题讨论】:

    标签: java mysql jpa bean-validation


    【解决方案1】:
    @Column(columnDefinition = "DECIMAL(7,2)")
    

    如果您询问应该如何验证,您应该使用@Min 和@Max 注释或@DecimalMin 和@DecimalMax 注释。

    @Size 是用于验证属性的注释,而不是定义其列。 @Size 通常用于确保字符串或集合具有一定的大小。

    【讨论】:

    • 那么我将如何使用@Max 来验证BigDecimal7,2
    • @Threat 当你说“用 7,2 验证 BigDecimal”时......你能澄清一下吗?当我读到这篇文章时,我假设您说的是具有特定比例和精度的 BigDecimal,这与最小值和最大值不同。
    • 换句话说,我的BigDecimal 必须符合例如9999999,99 最大值。据我了解,与 MySQL 验证它的方式相同。
    • @ThreaT,DECIMAL(7,2)表示共7位,其中小数点后2位。所以它可以容纳的最大值是99999,99
    • 它向我抛出 SQL 错误:0,SQLState:22003,错误:数字字段溢出。 source 是 BigDecimal 字段。我试图把@Column(columnDefinition = "DECIMAL(8,8)") 放过来,所以我还需要发现更多的东西。
    【解决方案2】:

    您可以直接使用 Hibernate Validator,并使用 @Digits 注释您的字段,如下所示:

    @Digits(integer=5, fraction=2)
    @Column(name = "weight")
    private BigDecimal weight;
    

    【讨论】:

    【解决方案3】:

    this answer

    @Column(nullable= false, precision=7, scale=2)    // Creates the database field with this size.
    @Digits(integer=9, fraction=2)                    // Validates data when used as a form
    private BigDecimal myField;
    

    【讨论】:

    • 我认为应该是@Column(nullable= false, precision=9, scale=2) 和@Digits(integer=7, fraction=2)
    猜你喜欢
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多