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

为什么要指定@Column(nullable = false)?

慕志泽
2023-03-14
问题内容

我有一个带注释的实体@Entity
如果我负责创建CREATE TABLE脚本,为什么要指定@Column( nullable = false )何时可以使用NOT NULL关键字在数据库中创建列?是否有任何示例显示在字段中使用此属性的好处?


问题答案:

更好的错误消息和错误处理,尤其是如果您还添加了JSR303
@NotNull批注

如果您将列创建为,NOT NULL但不告诉JPA它不是null,则JPA会假定null值可以。当您尝试使用空值保存对象时,它将继续将其发送到数据库,并且您会收到数据库级别的错误。这会增加数据库中的日志垃圾邮件,并且从错误中很难确定哪个表的哪一列是问题,更不用说将它们映射回其JPA名称了。

如果将它们注释为非null,则JPA将在保存之前引发异常,避免DB日志垃圾邮件,并且通常会给您带来更好的错误。特别是,如果你的JPA提供支持JSR303,要么转化nullable=false@NotNull内部或你添加@NotNull过,它会给你一个数据结构,你可以检查,看看是什么对象被拒绝的原因是什么什么领域,具有自定义模板一起错误消息。

这就是为什么您应该向JPA告知有关NOT NULL字段的原因。这样,其他编写您的代码的人就更容易理解,而不必阅读数据库模式。



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

  • 如果我的理解是正确的,那么为什么不将的==和!=运算符重载为: 那我们就可以省下两个铸件了?

  • 根据我的理解,您使用CA的私钥来签署CSR,但为什么所有openssl CSR签名命令在签署CSR时都需要指定CA证书,如下所示: openssl x509-req-days 360-输入server.csr-ca ca.crt-cakey ca.key-cacreateSerial-out server.crt

  • 我阅读了一些文章,发现:默认情况下,预启用了以下HttpMessageConverters实例: ByteArrayHttpMessageConverter-转换字节数组 StringHttpMessageConverter-转换字符串 ResourceHttpMessageConverter-转换org.springframework.core.io.resource用于任何类型的八位组流 So

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

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