我可以使嵌入式Hibernate实体不可为空吗?

And*_*lla 33 hibernate nullable embeddable

我想要的是:

@Embedded(nullable = false)
private Direito direito;
Run Code Online (Sandbox Code Playgroud)

但是,正如您所知,@ Embeddable没有这样的属性.

有没有正确的方法来做到这一点?我不想要解决方法.

Chs*_*y76 36

可嵌入组件(或复合元素,无论您想要调用它们)通常包含多个属性,因此映射到多个列.因此可以以不同的方式处理整个组件为空; J2EE规范并没有这样或那样.

如果组件的所有属性都为NULL,则Hibernate认为组件为NULL(反之亦然).因此,您可以将一个(任何)属性声明为非null(在on @Embeddable或者作为@AttributeOverrideon的一部分@Embedded)以实现您想要的.

或者,如果您正在使用Hibernate Validator,您可以注释您的属性,@NotNull尽管这只会导致应用程序级别检查,而不是数据库级别.


use*_*037 21

从Hibernate 5.1开始可以使用"hibernate.create_empty_composites.enabled"来改变这种行为(参见https://hibernate.atlassian.net/browse/HHH-7610)

  • 这应该被标记为正确答案。 (2认同)

Tom*_*ský 11

将虚拟字段添加到标记为@Embeddable的类中.

@Formula("0")
private int dummy;
Run Code Online (Sandbox Code Playgroud)

请参阅https://issues.jboss.org/browse/HIBERNATE-50.

  • 类似的东西对我来说也适用于 Eclipselink。具体来说,我正在使用“transient private int workaroundForBraindeadJpaImplementation = 1;” (2认同)
  • 不适用于“ 0”值。使用`@Formula(“ 1”)` (2认同)