@Basic (необязательно = false) против @Column (nullable = false) в JPA - PullRequest
94 голосов
/ 24 мая 2010

В чем разница между @Basic(optional = false) и @Column(nullable = false) в стойкости JPA?

Ответы [ 2 ]

89 голосов
/ 24 мая 2010

Гордон Йорк (член архитектурного комитета EclipseLink, главный технический специалист TopLink, член группы экспертов JPA 2.0) написал хороший ответ на эту тему, поэтому вместо его перефразирования я процитирую его ответ :

Разница между optional и nullable является областью, в которой они оцениваются.Определение «optional» говорит о свойствах и значениях полей и предполагает, что эта функция должна оцениваться во время выполнения.«nullable» относится только к столбцам базы данных.

Если реализация решит реализовать optional, то эти свойства должны быть оценены в памяти провайдером постоянства и возникнет исключительная ситуация перед отправкой SQL в базу данных, в противном случае при использовании 'updatable=false' 'optionalо нарушениях никогда не сообщалось.

3 голосов
/ 21 августа 2017

Итак, я попробовал аннотацию @Basic (необязательно = false), используя JPA 2.1 (EclipseLink), и оказалось, что аннотация игнорируется при фактическом использовании (по крайней мере для поля String).(например, entityManager.persist вызывает).

Так что я пошел к спецификации и прочитал об этом.Вот что говорит спецификация:
http://download.oracle.com/otndocs/jcp/persistence-2.0-fr-oth-JSpec/

Basic (необязательно): может ли значение поля или свойства быть нулевым.Это подсказка и игнорируется для примитивных типов;он может использоваться при генерации схемы.

Так что я думаю, что это предложение объясняет реальный вариант использования Basic (необязательно), который используется при генерации схемы.(То есть: когда вы генерируете CREATE TABLE SQL из классов Java Entity. Это то, что Hibernate может сделать, например.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...