【问题标题】:Creating Composite Primary Key in Child Class (JPA)在子类 (JPA) 中创建复合主键
【发布时间】:2017-06-19 22:29:07
【问题描述】:

假设我在父类和子类之间有以下情况:

Class Parent {
    @Id
    @Column(name="product")
    Long product;

    //more fields.
}

Class Child extends Parent {
    @Column(name="type")
    String productType;

    @Column(name="version")
    int version;

    //more fields.
}

即使子类扩展了已经有主键的父类,是否可以在子类中拥有复合主键?

【问题讨论】:

  • 可能取决于继承策略,基本上对于你的用例你至少需要table per class策略,因为一张表不能有两个主键,我不知道你还需要什么,除此之外,您是否尝试过@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS),然后在儿童中设置不同的@Id(注意:每个班级的表格可能不是最好的效率)
  • 如果您描述您的真正目标,例如 ParentChild,以及为什么您需要让孩子拥有不同的主键,也许我们可以指导您找到更好的解决方案
  • @niceman 感谢您的及时回复。我还没有尝试过@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) 的策略。我会调查的。谢谢。

标签: java jpa


【解决方案1】:

简短的回答是否定的。在 JPA 中,您不能重新定义主键。如果您的父类有@ID 注释,则无论继承策略如何,子类都不会允许@ID 注释。

更长的答案是,如果你需要做这样的事情,你应该重新考虑你的对象映射和你的继承策略。如果您的父母已经拥有一组可唯一识别的字段,那么您为什么要寻找一个打破此惯例的孩子?即使你成功了,在架构和代码清晰度方面,这对你来说是否安全?

【讨论】:

  • 感谢您的及时回复。我会重新考虑对象映射和继承策略。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-13
  • 1970-01-01
  • 2013-06-07
  • 1970-01-01
  • 2011-09-21
  • 1970-01-01
  • 2012-09-17
相关资源
最近更新 更多