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

  • 属于javax.validation.constraints包裹。
  • 作为模式创建的一部分,在 DB 列上创建了非空约束。
  • 由验证引擎 (VE) 处理。
  • 如果属性未设置(或设置为 null),则在持久化时,VE 会引发异常。
  • 由于属性验证是
    由 VE 处理,在非持久层(如 UI)中很有用
    层(JSF)。

  • @基本(可选=假)
  • 属于javax.persistence包裹。
  • 作为模式创建的一部分,在 DB 列上创建了非空约束。
  • 由持久性提供程序 (PP) 处理。
  • 如果在持久化时未设置(或设置为空)属性,则 PP 不会将语句传递给 DB;它抛出一个异常。

  • @Column(nullable=false)
  • 属于javax.persistence包裹。
  • 作为模式创建的一部分,在 DB 列上创建了非空约束。
  • 由持久性提供程序 (PP) 处理。
  • 如果在持久化时未设置(或设置为空)属性,则 PP 不会将语句传递给 DB;它抛出一个异常。
  • 允许指定附加参数,如列名(可以与属性名不同)。
  • 关于hibernate - @Basic(optional = false) vs @Column(nullable = false) vs @NotNull,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43146141/

    相关文章:

    java - 如何避免多次执行相同的查询?

    hibernate - 使用不同的别名多次加入关联

    java - 带有 Spring 的 JPA 的手动事务服务和 DAO 层

    java - Spring Boot 指定 Hibernate 类而不是指定包

    jquery - 验证来自 ajax 注入(inject)元素的数据。需要将新数据绑定(bind)到文档,以便验证看到它。 MVC

    javascript - 错误:在JS中时不允许使用该元素

    php - PHP 服务器端如何检查网站的 url 是否有效?

    java - 在数据库中找不到但在持久性上下文中存在的实体

    java - 双向 OneToOne 被多次加载

    java - Spring Data JPA 合并更新的实体