我想做这一列不能为空,但是当我在数据库中插入一个寄存器值时,这允许我插入。我阅读了文档,但我不知道为什么不起作用。
@Column(name="QWECOD", nullable = false)
private String qwe;
谢谢
更新:我正在使用Toplink和 java org.eclipse.persistence.eclipselink:2.4.2。
我想做这一列不能为空,但是当我在数据库中插入一个寄存器值时,这允许我插入。我阅读了文档,但我不知道为什么不起作用。
@Column(name="QWECOD", nullable = false)
private String qwe;
谢谢
更新:我正在使用Toplink和 java org.eclipse.persistence.eclipselink:2.4.2。
如果您使用实体管理器的实现生成模式,我认为可以使用 nullable。我不知道它是否/必须在持久化实体的同时进行验证。
如果您使用 @NotNull 注释可能会有所帮助,但这不是普通的 JPA。它在JSR-303中定义
Stackoverflow 上也有一个主题涵盖了您的问题: Stackoverflow - Confusion notnull vs columnnullable false
编辑:在 JPA 2.1 规范中,有这个部分:
11.2.2.1 列
Column 注释的以下元素用于模式生成:
名称
唯一可为
空的列定义
表
长度(仅限字符串值列)精度(仅限精确数字(十进制/数字)列)比例尺(精确数字(十进制/数字) ) 仅列)有关适用于这些元素和列创建的规则,请参见第 11.1.9 节。AttributeOverride 注释可用于覆盖列映射。
由于没有给出其他提示,我假设以下内容:如果符合 JPA 的 EntityManager 创建模式,它必须通过使用等效的 DB 相关约束(例如 notnull)对特定列应用可为空的约束当您持久化实体时,它不是由实体管理器检查,而是由基础数据库检查。因此,如果 DB 引发错误,EntityManager 会将此错误传播给调用者。
如果您自己创建表而不使用 DB 可为空约束,那么 entitymanager 会尝试持久化实体并且不会出现错误 -> 持久化是可以的,尽管有一些不应该存在的空值。
如果您直接在数据库中插入,那么 Hibernate 或任何持久性提供程序将无法控制您。尝试使用持久性提供程序插入。
可能在基础中,您已经拥有带有空值的字段在这些情况下,您必须手动更改字段的空性 MySql 查询:
alter table [table] modify [column] [[Column_Type] ej: vachar] not null;