@OneToOne(可选= false)和@JoinColumn(nullable = false)一起使用

我在JPA 2.0 FR规范11.1.37中遇到了这个例子。 OneToOne注释,第403页:

@OneToOne(optional=false) @JoinColumn(name="CUSTREC_ID", unique=true, nullable=false, updatable=false) public CustomerRecord getCustomerRecord() { return customerRecord; } 

我有什么理由把@OneToOne(optional=false)放在同一时间放@JoinColumn(... nullable=false)

这两个声明不一样吗? 其中一个不是多余的吗?
它们都用于DDL模式生成吗?

forms上, optional=false是JPA实现的运行时指令, nullable=false是DDL生成器的指令。 所以他们并不是严格多余的。

当涉及实体inheritance时,差异可能变得显着。 如果特定映射仅存在于子类上,并且您具有单个表表每层次结构策略,则OneToOne映射在包含映射的特定子类上可以是optional=false 。 但是,实际的连接列不能为空 – 因为那时共享该表的其他子类不能插入!

在实践中,不同版本的不同提供者可能会或可能不会在任何时候解释任何一个,告诫者。