我有一个用@Entity
.
如果我负责创建CREATE TABLE
脚本,为什么我应该指定@Column( nullable = false )
何时可以在数据库中使用NOT NULL
关键字创建列?是否有任何示例显示在字段中使用此属性的好处?
问问题
51876 次
3 回答
56
更好的错误消息和错误处理,特别是如果您还添加了JSR303 @NotNull 注释。
如果您将列创建为NOT NULL
但不告诉 JPA 它不为空,JPA 将假定空值是可以的。当您尝试使用空值保存对象时,它将继续将其发送到数据库,您将收到数据库级别错误。这增加了数据库中的日志垃圾邮件,并且很难从错误中确定哪些表的哪些列是问题,更不用说将它们映射回它们的 JPA 名称了。
如果您将它们注释为非空,JPA 将在保存之前抛出异常,避免 DB 日志垃圾邮件,通常会给您一个更好的错误。特别是,如果您的 JPA 提供程序支持 JSR303 并且在内部转换nullable=false
为@NotNull
或您也已添加@NotNull
,它将为您提供一个数据结构,您可以检查以确切了解哪些对象的哪些字段因什么原因被拒绝,以及可定制的模板化错误信息。
这就是为什么你应该告诉 JPANOT NULL
字段。这样,处理您的代码的其他人更容易理解,而无需阅读 DB 模式。
于 2013-03-03T02:56:44.687 回答
33
此外,如果您的列有nullable = false
注释@ManyToOne
,Hibernate 会对相关表进行INNER JOIN查询。nullable = true
给出结果LEFT JOIN。
那是另一个区别。
于 2015-07-02T08:40:26.853 回答
4
在您的情况下,可能没有实际好处,但是:
- 如果您使用 jpa 提供程序来生成架构(通过 maven 或通过像 hbm2ddl.auto 这样的自动生成),那么这很重要
- 如果您将 jpa 提供程序配置为针对实体模型验证架构,那么您需要它们同步。
于 2013-03-03T02:03:59.223 回答