JSR-303和JPA重叠

use*_*058 3 java jpa bean-validation

阿罗哈嘿!

我已经使用了JPA注释,现在我想使用JSR-303注释来验证属性.

我的问题是,他们彼此之间的互动有多好?
如果我使用@Basic(optional=false)@NotNull,我还需要使用nullable=false等吗?

我还没有决定使用哪个验证器实现,例如hibernate-validator或oVal(你也可以建议别人.我知道oVal不是JSR-303实现,但它映射了大多数注释).

oVal手册(见上文)指出某些JPA注释也将被翻译成oVal注释.Hibernate-validator 具有类似的机制.

一些搜索结果声称Bean Validation和JPA正式重叠,但我还没有想出具体的方法.

Sha*_*zeb 6

它们都是运行时间检查.虽然
JPA规范状态@Basic(optional = false) 可以用作模式提示,但是如果您通过JPA更新数据库模式(虽然通常不是一个好习惯),但您可以使用它来指示此列值不能为空且必须具有值.

第9.1.18节JPA1规范的基本注释

第11.1.6节JPA2规范的基本注释

清楚地表明这一点.

除此之外,在将sql发送到数据库之前,两者都会进行运行时检查.
一般用于在将SQL发送到服务器之前进行验证,如果您使用的JSR 303包括许多其他检查,您将使用@NotNull但是您可能没有使用JSR 303,在这种情况下您可以使用@Basic(optional = false)哪个已经在JSR 303之前已经出来但是不是比JSR303更受欢迎.
您现在可能想知道@Column(nullable = false)纯粹在数据库端使用.
您是否应该同时使用 - 只有在允许JPA更新架构时才会使用,否则JSR-303优先于另一个.