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

时间:2011-02-17 10:34:19

标签: java hibernate jpa-2.0

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

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

我读了这个答案@Basic(optional = false) vs @Column(nullable = false) in JPA并认为这可能是可以实现的,但想知道最好的方法是什么。

1 个答案:

答案 0 :(得分:2)

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

如果是这样,强制执行此规则的唯一选择是使用JSR-303 Bean Validation中的@NotNull约束。 JSR-303与JPA 2.0平滑集成,因此在实体持久化时会自动检查约束,请参阅Hibernate Validator