在@MappedSuperclass中定义@UniqueConstraint

时间:2013-12-12 18:53:49

标签: java-ee eclipselink jpa-2.1

我有一个要求,其中我的许多实体需要Long值和与其他实体的@ManyToOne关系。使用MappedSuperclass可以通过以下方式轻松实现此要求:

    @MappedSuperclass
    public class BaseEntity {

      @Column(name = "value", nullable = false)
      private Long value;
      @JoinColumn(name = "some_entity_id", nullable = false)
      @ManyToOne(fetch = FetchType.EAGER)
      private SomeEntity some;

问题是长值和实体组合必须是唯一的。是否可以在超类中定义索引?如果我在实体的@Table中定义索引,则代码按预期工作

   @UniqueConstraint(name = "uq1", columnNames = {"value", "some_entity_id"})

挫折是必须沿着所有子类复制约束,然后还需要复制所有更改,使继承几乎无用(绝对不是那么优雅)

总结一下真正的问题是:可以从@MappedSuperclass定义复合唯一约束吗?如果答案是否定的,你会做什么?

PS:我知道只有当表格生成生效时,这才是相关的,它是我们编码和最佳实践政治的全部内容。

1 个答案:

答案 0 :(得分:0)

我可以全部输入,或者我可以给你一个解决方案的链接:)

How to use @UniqueConstraint with single table inheritance (JPA)?

实质上,您不能覆盖扩展类中的@Table注释,但是,您可以在orm.xml文件中设置唯一约束(从persistence.xml引用)。< / p>

这意味着,您可以添加一个唯一的约束,该约束将从扩展基类的所有类继承。