@ManyToOne(可选=假)与@Column(nullable=false)有什么区别

2022-08-31 13:40:01

在JPA中,我对何时使用属性和注释感到困惑。有什么区别?optional=false@Column(nullable=false)


答案 1

@Column(nullable=false)是用于生成架构的指令。在实际数据库中,从类生成的数据库列将被标记为不可为 null。

optional=false是运行时指令。它所做的主要功能与延迟加载有关。你不能延迟加载非集合映射实体,除非你记得设置 optional=false(因为 Hibernate 不知道那里是否应该有一个代理或一个 null,除非你告诉它 null 是不可能的,所以它可以生成一个代理。


答案 2

两者都用于防止空值,但是如果您介意在...

数据库层(并且您希望使用 JPA 生成模式)-->使用@Column(nullable=false)

运行时(在联系数据库之前)-->使用(比第一次检查快得多)。optional=false

如果你想要这两种能力,请同时使用它们。


推荐