@ManyToOne(可选= false)和@Column(nullable = false)之间有什么区别?

在JPA中,我很困惑何时使用属性optional=false和注解@Column(nullable=false) 。 有什么不同?

@Column(nullable=false)是生成模式的指令。 在类中生成的数据库列在实际数据库中将被标记为不可空。

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

这两个是用来防止空值,但如果你介意null应该被阻止在…

数据库层(你想用JPA生成模式) – >使用@Column(nullable=false)

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

如果你想要两种能力,那就用它们。