Java 我什么时候应该在JPA2.0中使用@Basic(可选=false)

Java 我什么时候应该在JPA2.0中使用@Basic(可选=false),java,hibernate,jpa-2.0,Java,Hibernate,Jpa 2.0,在JPA中,我有一个单表映射的继承,比如说类a和B扩展了一些抽象实体,所以我必须在DB端使a和B中的列可以为null,但是如果有人试图持久化a,那么a的所有字段都不应该为null,我想通过代码强制执行这一点。 我可以使用以下代码来实现这一点- @Entity @DiscriminatorValue("1") public Class A extends SomeAbstractEntity{ @Basic(optional = false) private

在JPA中,我有一个单表映射的继承,比如说类a和B扩展了一些抽象实体,所以我必须在DB端使a和B中的列可以为null,但是如果有人试图持久化a,那么a的所有字段都不应该为null,我想通过代码强制执行这一点。 我可以使用以下代码来实现这一点-

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

我读了这个答案,认为这可能是可以实现的,但我想知道什么是最好的方法。

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


如果是这样,执行此规则的唯一选项是使用JSR-303 Bean验证中的
@NotNull
约束。JSR-303与JPA 2.0顺利集成,因此在实体持久化时会自动检查约束,请参见。

我发现有太多情况下,实现(hibernate)并没有真正做到标准所说的。所以,即使理论上可以,测试也是确保的唯一方法。哦。。真正地你能举几个例子吗?看看这段视频17-20都是关于继承的。我建议在那里看所有的视频。谢谢你的回复:)我会看一看,但是除了这个还有别的办法吗?(不需要在类路径中添加新的jar:))我不是说它不工作。。我只是问最好的办法。@Premraj:我想没有别的办法了。