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

2022-09-02 12:28:05

我在 JPA 2.0 FR 规范 11.1.37 中碰到了这个例子。一对一注释,第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 架构生成中使用?


答案 1

形式上是 JPA 实现的运行时指令,也是 DDL 生成器的指令。因此,它们不是严格冗余的。optional=falsenullable=false

当涉及实体继承时,差异可能会变得显著。如果特定映射仅存在于子类上,并且您具有单个表表的层次结构策略,则 OneToOne 映射可能位于包含该映射的特定子类上。但是,实际的联接列不能设置为 not-null,因为这样就不能插入共享该表的其他子类!optional=false

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


答案 2

推荐