Рассмотрим простую сущность, такую как Room
, которая имеет отношение @ManyToOne
к House
.
@Entity
class Room(
@ManyToOne(optional = true)
val house: House
) {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
val id: Long = 0
}
JPA создаст таблицу комнат со столбцом
`house_id` bigint(20) DEFAULT NULL
Если вы укажете @ManyToOne(optional = false)
столбец будет выглядеть так:
`house_id` bigint(20) NOT NULL
Указывая необязательный параметр, вы сообщаете JPA, как должна создаваться схема, может ли столбец быть NULL
или нет.
Во время выполнения попытка загрузить Room
без House
вызовет исключение, если свойство дома не обнуляется (House
вместо House?
), даже если значение optional
равно true
.
То же самое относится к @JoinColumn
.
Является ли необязательный параметр @ ManyToOne автоматически установленным с помощью Kotlin
допустимость пустой
Нет, это не так. Он не зависит от этого и по умолчанию установлен на true
.
Вывод: Чтобы ваша схема отражала ваши сущности, рекомендуется использовать optional = true
, если свойство дома будет обнуляемым, и optional = false
, если свойство дома не обнуляемым .