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

2022-08-31 22:25:05

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


答案 1

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

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

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

这就是为什么你应该告诉JPA关于字段。这样,对于处理您的代码的其他人来说,它更容易理解,而不必也读取数据库架构。NOT NULL


答案 2

此外,如果您的列具有 in 批注,则 Hibernate 会对相关表执行 INNER JOIN 查询。 给出结果左连接nullable = false@ManyToOnenullable = true

这是另一个区别。


推荐