当前位置: 首页 > 面试题库 >

Confusion: @NotNull vs. @Column(nullable = false) with JPA and Hibernate

干鑫鹏
2023-03-14
问题内容
  1. 当它们出现在的字段/获取器上时,它们@Entity之间有什么区别?(我通过Hibernate保留了Entity )。
  2. 它们每个都属于什么框架和/或规范?
  3. @NotNull位于中javax.validation.constraints。在javax.validation.constraints.NotNulljavadoc中说

带注释的元素不能为空

但是它没有提到数据库中元素的表示形式,那么为什么nullable=false要在列中添加约束呢?


问题答案:

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



 类似资料:
  • 问题内容: 和JPA持久性之间有什么区别? 问题答案: Gordon Yorke(EclipseLink体系结构委员会成员,TopLink核心技术负责人,JPA 2.0专家组成员)在此主题上写了一个很好的答案,因此,我不用表述他,而是引用他的答案: 和 之间的区别是评估它们的范围。’ ‘ 的定义讨论了属性和字段值,并建议应在运行时内评估此功能。“ ”仅指数据库列。 如果实现选择实现,则这些属性应由

  • 问题内容: 我有一个带注释的实体。 如果我负责创建脚本,为什么要指定何时可以使用关键字在数据库中创建列?是否有任何示例显示在字段中使用此属性的好处? 问题答案: 更好的错误消息和错误处理,尤其是如果您还添加了JSR303 @NotNull批注 。 如果您将列创建为,但不告诉JPA它不是null,则JPA会假定null值可以。当您尝试使用空值保存对象时,它将继续将其发送到数据库,并且您会收到数据库级

  • 问题内容: 在JPA中,我什么时候使用属性和注释感到困惑。有什么区别? 问题答案: 是用于生成架构的指令。在类中生成的数据库列将在实际数据库中标记为不可为空。 是运行时指令。它所做的主要功能是与延迟加载有关。您不能延迟加载非集合映射的实体,除非您记得设置了optional = false(因为Hibernate不知道那里应该有一个代理还是一个null,除非您告诉它null是不可能的,否则它可以生成

  • 问题内容: 我想做这个列不能为null,但是当我在数据库中插入一个寄存器值null时,这允许我插入。我阅读了文档,但我不知道为什么不起作用。 谢谢 更新:我正在使用 Toplink 和java org.eclipse.persistence.eclipselink:2.4.2 。 问题答案: 我认为如果您使用EntityManager的实现生成模式,则会使用可为空的。我不知道是否也必须在持久化实体

  • 问题内容: 当它们出现在的字段/获取器上时,它们之间有什么区别?(我通过 Hibernate 保留了Entity )。 它们每个都属于什么框架和/或规范? 位于中。在javadoc中说 带注释的元素不能为null 但是它没有说数据库中元素的表示形式,那么为什么要在列中添加约束呢? 问题答案: 是JSR 303 Bean验证 批注。它与数据库约束本身无关。由于Hibernate是JSR 303的参考

  • 我有一个Spring实体,其中有一个用javax.validation.constraints中的@NotNull注释的字段 问题是,如果为name字段设置了空值,则将其存储在数据库中。但是,如果我按以下方式更改类,它会引发我想要接收的异常: ApplicationContext-JPA 由于我使用的是存储库,因此我还报告了corrisponding实体存储库: