@ManyToOne可选标志与@JoinColumn可为空标志之间有什么区别?

dle*_*rob 3 jpa

我有以下定义公司的实体不能为空:

@ManyToOne(optional = false)
@JoinColumn(nullable = false)
private Company company;
Run Code Online (Sandbox Code Playgroud)

@ManyToOne批注中的“ optional = false”和@JoinColumn批注中的“ nullable = false”之间有什么区别?还是将它们都设置为多余?

Nik*_*los 5

@ManyToOne在所谓的逻辑模型上进行操作,即对象关系映射的面向对象侧。optional=false这里的语义是:

关联是否可选。如果设置为false,则必须始终存在非null关系。

因此,JPA引擎期望基础存储将始终提供可以转换为Company对象的值。

@JoinColumn对物理模型进行操作,即如何在数据库(数据库)中实际放置事物。指定nullable = false将使DB列不可为空。

如果@JoinColumn(nullable = false)省略,则该列可以为空。可以在其中插入一个空值,DB会很乐意接受它。但是,如果有人尝试通过JPA读取该值,则JPA引擎会提出抗议,因为它期望可以将其转换为Company对象的值始终存在,如所指定@ManyToOne(optional = false)

  • 那么,为“ManyToOne::Optional”和“JoinColumn::nullable”设置不同值的实际用例是什么? (2认同)