JPA @Size 注解用于 BigDecimal 数据类型的限制大小。

18

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

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

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

28
您可以直接使用Hibernate Validator,并像这样用@Digits注释您的字段:
@Digits(integer=5, fraction=2)
@Column(name = "weight")
private BigDecimal weight;

它也能与TopLink的javax.persistence_1.0.0.0_1-0-2.jar一起使用吗? - user1191027
1
验证是与JPA分开的API。因此,当您尝试通过“persist()”持久化实体时不会出现任何错误,例如,您必须自行进行验证。 - mavroprovato
我该如何自己进行验证?有没有链接可以让我在Oracle的网站上阅读更多相关信息? - user1191027
1
我的意思是,在视图层之前应该进行验证,然后再尝试保存到数据库。如果您正在使用JSF,请参阅http://docs.oracle.com/javaee/6/tutorial/doc/gircz.html;如果您正在使用Spring,请参阅此处http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/validation.html。 - mavroprovato
1
Java EE 7:http://docs.oracle.com/javaee/7/tutorial/doc/bean-validation001.htm#GIRCZ看起来@DecimalMax是要使用的注释? - user1191027

19

请查看这个答案

@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;

1
我认为应该是@Column(nullable=false, precision=9, scale=2)和@Digits(integer=7, fraction=2)。 - Tony Wen

8
@Column(columnDefinition = "DECIMAL(7,2)")

如果你想知道如何进行验证,你应该使用@Min和@Max注释或@DecimalMin和@DecimalMax注释。

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


那么我该如何使用@Max来验证一个具有7,2BigDecimal - user1191027
@Threat 当你说“验证一个7,2的BigDecimal”时...你能澄清一下吗?当我读到这个时,我认为你是在谈论一个具有特定比例和精度的BigDecimal,这与最小值和最大值不同。 - zmf
换句话说,我的 BigDecimal 必须符合例如 9999999,99 的最大值。就我所了解的情况,MySQL 会进行相同的验证。 - user1191027
@ThreaT,“DECIMAL(7,2)”表示总共有7个数字,其中2个在小数点后面。因此,它可以容纳的最大值为99999.99。 - mavroprovato
它给我抛出了SQL错误:0,SQLState:22003,ERROR:numeric field overflow。源是BigDecimal字段。我尝试将其放置在@Column(columnDefinition = "DECIMAL(8,8)")上方,因此还有一些我需要发现的东西。 - kensai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接