hibernate - @Basic(optional = false) vs @Column(nullable = false) vs @NotNull

标签 hibernate validation jpa jsr

在这三个选项中,我应该使用一个还是两个或所有三个组合来防止出现空值?

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

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

最佳答案

@NotNull

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

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

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

@Basic(optional=false)

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

@Column(nullable=false)

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

关于hibernate - @Basic(optional = false) vs @Column(nullable = false) vs @NotNull,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43146141/

相关文章:

JPA,模式或反模式 : to have both flat and related sets of mappings?

java - 带有 JPA 存储库的 Spring Boot 静态 where 子句

javascript - 验证输入和复选框

spring - 如何使用 Spring Data JPA 根据 bool 参数包含或排除记录?

PHP filter_var() - FILTER_VALIDATE_URL

java - 尝试 Autowiring javax.validation.Validator 时奇怪的 spring-boot 行为

hibernate - Spring 数据 jpa 按查询计数

Java, hibernate transient 字段

java - JSP页面显示数据时出现java.lang.NumberFormatException

java - Eclipse/Hibernate 工具错误 : Archive classpath entry doesn't exist