JPA 中的 @Basic(可选 = false) 与 @Column(nullable = false)

2022-08-31 09:38:56

JPA 持久性和 JPA 持久性之间有什么区别?@Basic(optional = false)@Column(nullable = false)


答案 1

Gordon Yorke(EclipseLink架构委员会成员,TopLink核心技术主管,JPA 2.0专家组成员)在这个主题上写了一个很好的答案,所以我不会解释他,而是引用他的答案

和 之间的区别是评估它们的范围。“”的定义涉及属性和字段值,并建议应在运行时内评估此功能。'' 仅引用数据库列。optionalnullableoptionalnullable

如果实现选择实现,则这些属性应由持久性提供程序在内存中评估,并且在将 SQL 发送到数据库之前引发异常,否则在使用 '' '' 时,将永远不会报告冲突。optionalupdatable=falseoptional


答案 2

所以我尝试了使用JPA 2.1(EclipseLink)@Basic(optional=false)注释,结果发现注释在实际使用中被忽略了(至少对于字符串字段)。(例如,entityManager.persist调用)。

所以我去了规范并阅读了它。以下是规范必须说的:
http://download.oracle.com/otndocs/jcp/persistence-2.0-fr-oth-JSpec/

基本(可选):字段或属性的值是否为 null。这是一个提示,对于基元类型是忽略的;它可以用于架构生成。

所以我认为这句话解释了Basic(可选)在模式生成中使用的实际用例。(即:当您从 Java 实体类生成 CREATE TABLE SQL 时。例如,这是Hibernate可以做的事情。


推荐