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

В чем разница между @ManyToOne (optional = false) и @Column (nullable = false)

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

Уровень базы данных (и вы хотите сгенерировать схему с помощью JPA) → использовать @Column(nullable=false)

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

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