我应该在JPA 2.0中何时使用@Basic(optional = false)

Pre*_*raj 6 java hibernate jpa-2.0

我在JPA中有一个单表映射的继承,Say A类和B类扩展了一些抽象实体,所以我必须在A端使A&B的列可以为空,但是如果有人试图保持A,那么A的所有字段都应该是不为null,我想通过代码强制执行此操作.我可以使用以下代码来实现此目的 -

@Entity  
@DiscriminatorValue("1")  
public Class A extends SomeAbstractEntity{    
     @Basic(optional = false)  
     private String nameOfA;  
}
Run Code Online (Sandbox Code Playgroud)

在JPA中读到了@Basic(可选= false)与@Column(nullable = false)的答案,并认为这可能是可以实现的,但想知道什么是最好的方法.

axt*_*avt 2

这很有趣,但看起来在这种情况下(单表继承)@Basic(optional = false)不是由 Hibernate 强制执行的(尽管在其他情况下它按预期工作)。

如果是这样,强制执行此规则的唯一选择是使用@NotNullJSR-303 Bean 验证中的约束。JSR-303 与 JPA 2.0 顺利集成,以便在持久化实体时自动检查约束,请参阅Hibernate Validator