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

时间:2017-03-31 17:05:17

标签: hibernate validation jpa jsr

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

@NotNull
@Column(name = "SOME_VALUE", nullable = false)
@Basic(optional = false)
private String someValue;

请注意,我不认为这是现有问题的重复。我看到many questions询问这三个选项中的一部分,但还没有找到一个询问三者中哪一个适合在现代JPA / Hibernate堆栈中使用。

1 个答案:

答案 0 :(得分:0)

@NotNull

  1. 属于javax.validation.constraints软件包。
  2. 作为架构创建的一部分,不会在DB列上创建null约束。
  3. 由验证引擎(VE)处理。

  4. 如果未设置属性(或将其设置为null),则在持久化时VE会引发异常。

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

@Basic(可选= false)

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

@Column(nullable = false)

  1. 属于javax.persistence软件包。
  2. 作为架构创建的一部分,不会在数据库列上创建空约束。
  3. 由数据库处理。
  4. 如果未设置属性(或设置为null),则持久性提供程序将值传递给DB,这会引发错误;依次作为PP异常包装的java.sql异常传递给程序。