JPA中的@Basic(可选= false)vs @Column(nullable = false)
JPA持久性中的@Basic(optional = false)
和@Column(nullable = false)
什么区别?
(EclipseLink架构委员会成员,TopLink核心技术负责人,JPA 2.0专家组成员)在这个主题上写了一个很好的答案,所以我不会引用他的解释,而是引用他的回答 :
optional
和nullable
的区别在于它们被评估的范围。 “optional
”的定义谈到属性和字段值,并build议应在运行时间内评估此function。 'nullable
'只是参考数据库列。如果一个实现select实现
optional
那么这些属性应该在持久化提供程序的内存中进行评估,并且在将SQL发送到数据库之前引发exception,否则当使用“updatable=false
”时,将不会报告“optional
”违规。
所以我尝试了使用JPA 2.1(EclipseLink)@Basic(可选= false)注释,事实certificate注释在实际使用中被忽略(至less对于string字段)。 (例如entityManager.persist调用)。
所以我去了规范,并阅读了它。 这是规范要说的:
http://download.oracle.com/otndocs/jcp/persistence-2.0-fr-oth-JSpec/
基本(可选):字段或属性的值是否为空。 这是一种暗示,对原始types不予考虑; 它可能用于模式生成。
所以我认为这个句子解释了用于模式生成的Basic(可选)的实际用例。 (也就是说,当你从Java Entity类生成CREATE TABLE SQL时,这是Hibernate能做的事情)。