gpt4 book ai didi

java - 持久化@Column nullable = false 可以插入null

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:09:54 24 4
gpt4 key购买 nike

我想做的是这一列不能为空,但是当我在数据库中插入一个寄存器值为空时,这允许我插入。我读了documentation我不知道为什么不起作用。 @Column(name="QWECOD", nullable = false)
私有(private)字符串 qwe;

谢谢

更新:我正在使用 Toplink 和 java org.eclipse.persistence.eclipselink:2.4.2

最佳答案

我认为如果您使用 entitymanager 的实现生成模式,则可以使用 nullable。我不知道在持久化实体时是否/必须对其进行验证。

如果您使用@NotNull 批注可能会有所帮助,但这不是普通的 JPA。它在 JSR-303 中定义

Stackoverflow 上也有一个主题涵盖了您的问题: Stackoverflow - Confusion notnull vs columnnullable false


编辑:在 JPA 2.1 规范中,有以下部分:

11.2.2.1 Column
The following elements of the Column annotation are used in schema generation:
name
unique
nullable
columnDefinition table
length (string-valued columns only) precision (exact numeric (decimal/numeric) columns only) scale (exact numeric (decimal/numeric) columns only) See section 11.1.9 for the rules that apply to these elements and column creation. The AttributeOverride annotation may be used to override column mappings.

由于没有给出其他提示,我假设如下:如果符合 JPA 的 EntityManager 创建模式,则它必须通过使用等效的 DB 相关约束(例如 notnull)在特定列上应用可空约束当您保留一个实体时,实体管理器不会检查它,而是由底层数据库检查。因此,如果数据库引发错误,EntityManager 会将此错误传播给调用者。

如果您在不使用 DB 可为空约束的情况下自行创建表,则实体管理器会尝试保留该实体并且不会出现错误 --> 保留是可以的,尽管存在一些不应该存在的空值。

关于java - 持久化@Column nullable = false 可以插入null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19444214/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com