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

Fag*_*ack 42 java jpa nullable jpa-2.0

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

Cra*_*ger 53

更好的错误消息和错误处理,特别是如果您还添加了JSR303 @NotNull注释.

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

如果您将它们注释为非null,JPA将在保存之前抛出异常,避免数据库日志垃圾邮件,并且通常会给您带来更好的错误.特别是,如果您的JPA提供程序支持JSR303并且转换nullable=false@NotNull内部或者您也已添加@NotNull,它将为您提供一个数据结构,您可以检查以确切了解哪些对象被拒绝的原因以及可自定义的模板错误消息.

这就是为什么你应该告诉JPA有关NOT NULL字段的原因.这样,在不需要读取数据库模式的情况下,处理代码的其他人也更容易理解.

  • 他们应该吗?如果它不是规范的一部分,我不明白为什么以及在哪种情况下.我宁愿拥有@NotNull但没有nullable = false,因为后者只是jpa.我的问题更多的是关于@Column的附加值(nullable = false). (3认同)

Ada*_*icz 29

此外,如果你的列有nullable = false@ManyToOne注释,Hibernate并INNER JOIN查询到相关的表.nullable = true给出结果LEFT JOIN.

这是另一个区别.