В чем разница между @Basic(optional = false)
и @Column(nullable = false)
в сохранении JPA?
@Basic(optional = false) vs @Column (nullable = false) в JPA
Ответ 1
Гордон Йорк (член комитета по архитектуре EclipseLink, технический руководитель TopLink Core, член экспертной группы JPA 2.0) написал хороший ответ на эту тему, поэтому вместо того, чтобы перефразировать его, я приведу его ответ:
Разница между
optional
иnullable
- это область, в которой они оцениваются. Определение 'optional
' говорит о собственности и значения полей и предполагает, что это функция должна оцениваться в пределах во время выполнения. 'nullable
' находится только в ссылка на столбцы базы данных.Если реализация выбирает
optional
, тогда свойства должны оцениваться в памяти Поставщиком Стойкости и исключение, возникшее до отправки SQL-запроса к базе данных в противном случае при использовании 'updatable=false
' 'optional
' нарушения никогда не будут сообщаться.
Ответ 2
Итак, я попробовал аннотацию @Basic (optional = false), используя JPA 2.1 (EclipseLink), и оказывается, что аннотация игнорируется при фактическом использовании (по крайней мере, для поля String). (например, вызовы entityManager.persist).
Итак, я пошел в спецификацию и прочитал об этом.
Вот то, что спецификация должна сказать:
http://download.oracle.com/otndocs/jcp/persistence-2.0-fr-oth-JSpec/
Базовый (необязательный): может ли значение поля или свойства быть нулевым. Это намек и не учитывается для примитивных типы; он может использоваться в генерации схемы.
Итак, я думаю, что это предложение объясняет реальный прецедент для Basic (необязательный), который используется в генерации схемы. (То есть: когда вы создаете CREATE TABLE SQL из классов Java Entity. Это то, что может сделать Hibernate, например.)