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