为了账号安全,请及时绑定邮箱和手机立即绑定

困惑:@NotNull vs @Column(nullable = false)

困惑:@NotNull vs @Column(nullable = false)

当它们出现在的字段/获取器上时,它们@Entity之间有什么区别?(我通过Hibernate保留了Entity )。它们每个都属于什么框架和/或规范?@NotNull位于中javax.validation.constraints。在javax.validation.constraints.NotNulljavadoc中说带注释的元素不能为null但是它没有说数据库中元素的表示形式,那么为什么nullable=false要在列中添加约束呢?
查看完整描述

3 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

@NotNull是JSR 303 Bean验证批注。它与数据库约束本身无关。由于Hibernate是JSR 303的参考实现,因此它会智能地选择这些约束并将它们转换为数据库约束,因此您只需付出1即可获得两个。@Column(nullable = false)是JPA声明列为非空的方法。即,前者用于验证,而后者则用于指示数据库架构详细信息。您将从Hibernate的验证批注中获得一些额外的(欢迎使用!)帮助。


查看完整回答
反对 回复 2019-10-15
?
冉冉说

TA贡献1877条经验 获得超1个赞

休眠的JPA提供程序的最新版本@NotNull默认将Bean验证约束(JSR 303)应用于DDL(由于hibernate.validator.apply_to_ddl property默认为true)。但是,不能保证其他JPA提供程序也可以做到这一点。


@NotNull在验证JVM中的Java bean时,应使用bean验证批注来确保将bean属性设置为非空值(这与数据库约束无关,但在大多数情况下应与它们对应)。


您还应该使用JPA批注,例如@Column(nullable = false)给jpa提供者提示以生成正确的DDL,以创建具有所需数据库约束的表列。如果您可以或希望依靠像Hibernate这样的JPA提供程序,该提供程序默认将Bean验证约束应用于DDL,则可以忽略它们。


查看完整回答
反对 回复 2019-10-15
  • 3 回答
  • 0 关注
  • 1844 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信