В чем разница между @ManyToOne (необязательно = false) и @Column (nullable = false) - PullRequest
50 голосов
/ 26 июля 2010

В JPA меня смущает использование атрибута optional=false и аннотации @Column(nullable=false).В чем разница?

Ответы [ 2 ]

82 голосов
/ 26 июля 2010

@Column(nullable=false) - инструкция для генерации схемы.Столбец базы данных, сгенерированный из класса, будет помечен как обнуляемый в фактической базе данных.

optional=false - инструкция времени выполнения.Основная функциональная вещь, которую он делает, связана с отложенной загрузкой.Вы не можете лениво загрузить сопоставленную сущность, не связанную с коллекцией, если не забудете установить опционально = false (потому что Hibernate не знает, должен ли быть там прокси или ноль, если вы не скажете, что нули невозможны, поэтому он может генерироватьпрокси.)

1 голос
/ 05 октября 2016

Оба используются для предотвращения нулевого значения, но если вы не возражаете, это значение должно быть заблокировано в ...

Слой database (и вы хотите сгенерировать схему с использованием JPA) -> использовать @Column(nullable=false)

Время выполнения (и перед обращением к базе данных) -> использовать optional=false (намного быстрее, чем первая проверка).

Если вы хотите обе способности, используйте их обе.

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