Подтвердить что ты не робот

Почему я должен указывать @Column (nullable = false)?

У меня есть объект, аннотированный с помощью @Entity.
Если я отвечаю за создание сценариев CREATE TABLE, почему я должен указывать @Column( nullable = false ), когда я могу создать столбец в базе данных с ключевыми словами NOT NULL? Есть ли какой-либо пример, показывающий преимущества использования этого свойства в поле?

4b9b3361

Ответ 1

Улучшенные сообщения об ошибках и обработка ошибок, особенно если вы также добавили JSR303 @NotNull аннотация.

Если вы создадите столбец как NOT NULL, но не сообщите JPA, что он не является нулевым, JPA будет считать, что нулевые значения в порядке. Когда вы пытаетесь сохранить объект с нулями, он перейдет к отправке в БД, и вы получите ошибку уровня DB. Это увеличивает лог-спам в базе данных, и из ошибки, которую столбец (-ов) столкнулся с проблемой, гораздо труднее определить, а не отображать их обратно в имена JPA.

Если вы аннотируете их как не равные нулю, JPA выдаст исключение перед сохранением, избегая спама в журнале БД и обычно давая вам лучшую ошибку. В частности, если ваш поставщик JPA поддерживает JSR303 и либо переводит nullable=false в @NotNull внутренне, либо вы добавили @NotNull тоже, он даст вам структуру данных, которую вы можете проверить, чтобы точно определить, какие поля были для объектов отклоняется по каким причинам, а также настраиваемые шаблонные сообщения об ошибках.

Вот почему вы должны сообщить JPA о NOT NULL. Это, и это проще для других, работающих над вашим кодом, чтобы понять, не имея также необходимости читать схему БД.

Ответ 2

Кроме того, если ваш столбец имеет nullable = false в @ManyToOne аннотации, Hibernate делает запрос INNER JOIN в соответствующую таблицу. nullable = true дает результат LEFT JOIN.

Это другая разница.

Ответ 3

В вашем случае может не быть фактической выгоды, но:

  • Если вы используете поставщик jpa для генерации вашей схемы (либо через maven, либо через автоматическое создание, например hbm2ddl.auto), тогда это имеет значение
  • Если вы настроите поставщика jpa для проверки схемы по модели сущности, вам необходимо синхронизировать ее.