我有以下定义公司的实体不能为空:
@ManyToOne(optional = false)
@JoinColumn(nullable = false)
private Company company;
Run Code Online (Sandbox Code Playgroud)
@ManyToOne批注中的“ optional = false”和@JoinColumn批注中的“ nullable = false”之间有什么区别?还是将它们都设置为多余?
@ManyToOne在所谓的逻辑模型上进行操作,即对象关系映射的面向对象侧。optional=false这里的语义是:
关联是否可选。如果设置为false,则必须始终存在非null关系。
因此,JPA引擎期望基础存储将始终提供可以转换为Company对象的值。
@JoinColumn对物理模型进行操作,即如何在数据库(数据库)中实际放置事物。指定nullable = false将使DB列不可为空。
如果@JoinColumn(nullable = false)省略,则该列可以为空。可以在其中插入一个空值,DB会很乐意接受它。但是,如果有人尝试通过JPA读取该值,则JPA引擎会提出抗议,因为它期望可以将其转换为Company对象的值始终存在,如所指定@ManyToOne(optional = false)。
| 归档时间: |
|
| 查看次数: |
1580 次 |
| 最近记录: |