BigDecimal 的 JPA @Size 注释
Posted
技术标签:
【中文标题】BigDecimal 的 JPA @Size 注释【英文标题】:JPA @Size annotation for BigDecimal 【发布时间】:2014-01-21 09:00:15 【问题描述】:如何为 mysql DECIMAL(x,y)
列使用 @Size
注释?
我正在使用BigDecimal
,但是当我尝试包含@Size
max
时,它不起作用。这是我的代码:
@Size(max = 7,2)
@Column(name = "weight")
private BigDecimal weight;
【问题讨论】:
【参考方案1】:@Column(columnDefinition = "DECIMAL(7,2)")
如果您询问应该如何验证,您应该使用@Min 和@Max 注释或@DecimalMin 和@DecimalMax 注释。
@Size 是用于验证属性的注释,而不是定义其列。 @Size 通常用于确保字符串或集合具有一定的大小。
【讨论】:
那么我将如何使用@Max
来验证BigDecimal
和7,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;
【讨论】:
TopLink 的javax.persistence_1.0.0.0_1-0-2.jar
也可以使用吗?
验证是一个独立于 JPA 的 API。因此,当您尝试通过persist()
持久化实体时不会出现错误,例如,您必须自己进行验证
我如何自己进行验证?是否有指向 Oracle 网站的链接,我可以在那里阅读更多信息?
我的意思是,在尝试保存到数据库之前,应该在视图层进行验证。如果您使用 JSF,请参阅docs.oracle.com/javaee/6/tutorial/doc/gircz.html,或者如果您使用 Spring,请参阅此处docs.spring.io/spring/docs/3.2.x/spring-framework-reference/…
Java EE 7: docs.oracle.com/javaee/7/tutorial/doc/… 看起来@DecimalMax
是要使用的注解?【参考方案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)以上是关于BigDecimal 的 JPA @Size 注释的主要内容,如果未能解决你的问题,请参考以下文章
JPQL 查询:选择一个布尔值,它是对象的两个字段的 AND