【发布时间】:2011-03-20 21:38:54
【问题描述】:
在 JPA 中,我对何时使用属性 optional=false 和注释 @Column(nullable=false) 感到困惑。有什么区别?
【问题讨论】:
-
可能的骗局 - stackoverflow.com/questions/2899073/… 我认为@Basic(optional=false) 的讨论也适用于@ManyToOne(optional=false)
在 JPA 中,我对何时使用属性 optional=false 和注释 @Column(nullable=false) 感到困惑。有什么区别?
【问题讨论】:
@Column(nullable=false) 是用于生成模式的指令。类生成的数据库列在实际数据库中将被标记为不可为空。
optional=false 是运行时指令。它所做的主要功能与延迟加载有关。除非您记得设置 optional=false,否则您不能延迟加载非集合映射实体(因为 Hibernate 不知道那里是否应该有代理或 null,除非您告诉它 null 是不可能的,因此它可以生成代理。)
【讨论】:
Both 用于防止 null 值,但如果您介意 null 应该被阻止在 ...
database 层(并且您想使用 JPA 生成模式)--> 使用 @Column(nullable=false)
运行时(在联系数据库之前)--> 使用optional=false(比第一次检查快得多)。
如果你想要这两种能力,请同时使用它们。
【讨论】: