Why should I specify @Column( nullable = false )?

主宰稳场 提交于 2019-12-29 03:32:08

问题


I have an entity annotated with @Entity.
If I am responsible for creating the CREATE TABLE scripts why should I specify @Column( nullable = false ) when I can create a column in the database with the NOT NULL keywords? Is there any example that shows the benefits of using this property in a field?


回答1:


Better error messages and error handling, especially if you also add the JSR303 @NotNull annotation.

If you create the column as NOT NULL but don't tell JPA it's not null, JPA will assume that null values are OK. When you try to save an object with nulls, it'll proceed to send that to the DB and you'll get a DB level error. This increases log spam in the database and it's much harder to determine from the error which column(s) of which table(s) were the problem, let alone map them back to their JPA names.

If you annotate them as not null, JPA will throw an exception before saving, avoiding DB log spam and usually giving you a better error. In particular, if your JPA provider supports JSR303 and either translates nullable=false into @NotNull internally or you've added @NotNull too, it'll give you a data structure you can examine to see exactly what fields of what objects were rejected for what reasons, along with customisable templated error messages.

That's why you should tell JPA about NOT NULL fields. That, and it's easier for others working on your code to understand without also having to read the DB schema.




回答2:


Additionally, if your column has nullable = false in @ManyToOne annotation, Hibernate does INNER JOIN query to the related table. nullable = true gives in result LEFT JOIN.

That is other difference.




回答3:


In your case there might not be actual benefit, but:

  • if you are using your jpa provider to generate your schema (either via maven or via automatic generation like hbm2ddl.auto), then it matters
  • if you configure your jpa provider to validate the schema against the entity model, then you need them to be in sync.


来源:https://stackoverflow.com/questions/15181632/why-should-i-specify-column-nullable-false

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!