【问题标题】:Define @UniqueConstraint in @MappedSuperclass在@MappedSuperclass 中定义@UniqueConstraint
【发布时间】:2013-12-31 08:33:48
【问题描述】:

我有一个要求,其中我的许多实体需要一个 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;

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

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

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

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

PS:我知道这一切只有在表生成生效时才相关,这都是我们编码和最佳实践政治的一部分。

【问题讨论】:

  • 如果你把BaseEntity抽象化,切换到getter/setter注解并定义一个抽象方法getId呢?

标签: jakarta-ee eclipselink jpa-2.1


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2015-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 2016-02-13
    • 2023-03-22
    • 2011-02-14
    相关资源
    最近更新 更多