在这三个选项中,我应该使用一个还是两个或所有三个组合来防止出现空值?
@NotNull
@Column(name = "SOME_VALUE", nullable = false)
@Basic(optional = false)
private String someValue;
请注意,我不认为这是现有问题的重复。我看到了 many questions询问这三个选项的子集,但还没有找到一个询问这三个选项中的哪一个适合在现代 JPA/Hibernate 堆栈中使用。
最佳答案
@NotNull
- 属于
javax.validation.constraints
包。 - 作为模式创建的一部分,在数据库列上创建了非空约束。
由验证引擎 (VE) 处理。
如果属性未设置(或设置为 null),则在保留时,VE 会抛出异常。
因为属性验证是 由 VE 处理,在 UI 等非持久层中很有用 层(JSF)。
@Basic(optional=false)
- 属于
javax.persistence
包。 - 作为模式创建的一部分,在数据库列上创建非空约束。
- 由持久性提供程序 (PP) 处理。
- 如果在持久化时未设置(或设置为空)属性,则 PP 不会将语句传递给 DB;它抛出异常。
@Column(nullable=false)
- 属于
javax.persistence
包。 - 作为模式创建的一部分,在数据库列上创建非空约束。
- 由持久性提供程序 (PP) 处理。
- 如果在持久化时未设置(或设置为空)属性,则 PP 不会将语句传递给 DB;它抛出异常。
- 允许指定附加参数,例如列名(可以与属性名不同)。
关于hibernate - @Basic(optional = false) vs @Column(nullable = false) vs @NotNull,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43146141/