我有一个用@Entity
注释的实体
如果我负责创建CREATE TABLE
脚本,当我可以使用@Column( nullable = false )
关键字在数据库中创建列时,为什么要指定NOT NULL
?是否有任何示例显示在字段中使用此属性的好处?
答案 0 :(得分:51)
更好的错误消息和错误处理,特别是如果您还添加了JSR303 @NotNull annotation。
如果您将列创建为NOT NULL
但不告诉JPA它不为空,JPA将假定空值为OK。当您尝试使用空值保存对象时,它将继续将其发送到数据库,您将收到数据库级错误。这会增加数据库中的日志垃圾邮件,并且很难从错误中确定哪个(哪些)表是问题的列,更不用说将它们映射回他们的JPA名称。
如果您将它们注释为非null,JPA将在保存之前抛出异常,避免数据库日志垃圾邮件,并且通常会给您带来更好的错误。特别是,如果您的JPA提供程序支持JSR303并且在内部将nullable=false
转换为@NotNull
,或者您也添加了@NotNull
,那么它将为您提供一个数据结构,您可以检查该数据结构由于什么原因拒绝了哪些对象被拒绝的字段,以及可自定义的模板化错误消息。
这就是为什么你应该告诉JPA关于NOT NULL
字段的原因。这样,在没有阅读数据库架构的情况下,处理代码的其他人也更容易理解。
答案 1 :(得分:27)
此外,如果您的列在nullable = false
注释中有@ManyToOne
,则Hibernate会对相关表执行 INNER JOIN 查询。 nullable = true
结果为 LEFT JOIN 。
这是其他差异。
答案 2 :(得分:3)
在您的情况下,可能没有实际的好处,但是: