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