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

Pio*_*cki 16 java annotations nullable java-ee-6 jpa-2.0

我在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; }
Run Code Online (Sandbox Code Playgroud)

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

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

Aff*_*ffe 33

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

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

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