Формально optional=false
- это инструкция времени выполнения для реализации JPA, а nullable=false
- это инструкция для генератора DDL.Таким образом, они не являются строго избыточными.
Различие может стать значительным, когда задействовано наследование объекта.Если конкретное сопоставление существует только в подклассе, и у вас есть стратегия для одной таблицы для каждой иерархии, тогда сопоставление OneToOne может составлять optional=false
для конкретного подкласса, который содержит сопоставление.Однако фактический столбец соединения нельзя сделать ненулевым, поскольку тогда другие подклассы, которые совместно используют таблицу, не могут быть вставлены!
На практике разные версии разных провайдеров могут интерпретировать или не интерпретировать ни одну из нихвремя, будьте бдительны.