@Basic(可选= false) vs @Column(nullable = false) vs @NotNull

Chr*_*ams 5 validation hibernate jpa jsr

在这三个选项中,我应该使用一个或两个或全部三个选项组合来防止空值?

@NotNull
@Column(name = "SOME_VALUE", nullable = false)
@Basic(optional = false)
private String someValue;
Run Code Online (Sandbox Code Playgroud)

请注意,我不认为这与现有问题重复。我看到许多 问题都询问这三个选项的子集,但尚未找到一个询问这三个选项中哪一个适合在现代 JPA/Hibernate 堆栈中使用的问题。

lup*_*oem 5

@NotNull

  1. 属于javax.validation.constraints包。
  2. 作为架构创建的一部分,在数据库列上创建非空约束。
  3. 由验证引擎(VE)处理。

  4. 如果未设置属性(或设置为 null),则在保留时,VE 会引发异常。

  5. 由于属性验证由 VE 处理,因此在 UI 层 (JSF) 等非持久层中很有用。

@Basic(可选=假)

  1. 属于javax.persistence包。
  2. 作为架构创建的一部分,在数据库列上创建非空约束。
  3. 由持久性提供者(PP)处理。
  4. 如果持久化时未设置属性(或设置为 null),PP 不会将语句传递给 DB;它抛出异常。

@Column(可为空=假)

  1. 属于javax.persistence包。
  2. 作为架构创建的一部分,在数据库列上创建非空约束。
  3. 由持久性提供者(PP)处理。
  4. 如果持久化时未设置属性(或设置为 null),PP 不会将语句传递给 DB;它抛出异常。
  5. 允许指定其他参数,例如列名称(可以与属性名称不同)。