【问题标题】:When should I use @Basic(optional = false) in JPA 2.0我什么时候应该在 JPA 2.0 中使用 @Basic(optional = false)
【发布时间】:2011-06-29 00:06:29
【问题描述】:

我在 JPA 中有一个带有单表映射的继承,说 A 类和 B 类扩展了一些抽象实体,所以我必须在 DB 端使 A 和 B 中的列可以为空,但是如果有人试图持久化 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 并认为这可能是可以实现的,但想知道什么是最好的方法。

【问题讨论】:

  • 我发现了太多的极端情况,其中实现(休眠)并没有真正做到标准似乎所说的那样。因此,即使理论上可以,测试也是唯一确定的方法。
  • 哦..真的吗?能举几个例子吗?
  • 看看这个site 视频 17-20 是关于继承的。我建议在那里观看所有视频。

标签: java hibernate jpa-2.0


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回复 :) 会看看它,但除此之外还有其他方法吗? (不需要在类路径中添加新的 jar :))
  • 我不是说它不起作用..我只是在问最好的方法。
  • @Premraj:我认为没有其他办法。
猜你喜欢
  • 1970-01-01
  • 2019-08-14
  • 1970-01-01
  • 2011-02-23
  • 2015-07-29
  • 1970-01-01
  • 2010-12-30
  • 1970-01-01
相关资源
最近更新 更多