Java - JPA:如何为每个子类创建一个表,而不是为超类创建一个表?

时间:2012-03-24 15:53:48

标签: java inheritance jpa abstract-class subclass

我有一个类结构:

abstract class A {
    String a;
}

class B extends A {
    String b;
}

class C extends A {
    String c;
}

现在我希望JPA为每个子类创建一个表。

enter image description here

我看过以前的一些问题,但我很困惑。我该如何映射这些类?

2 个答案:

答案 0 :(得分:5)

如果A由于映射而继承,并且您不需要单独的实体,则可以将其定义为MappedSuperClass。映射的超类仅用于继承映射,您无法查询它。

另一方面,如果需要真正的继承 - 取决于实现 - 你可以选择table per (concrete) class继承策略。对此策略的支持是可选的,因此不保证可以与所有实现一起使用。它至少得到了

的新版本的支持

在您需要的情况下,需要在步骤A中添加以下内容:@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)

答案 1 :(得分:0)

为什么不使用@MappedSuperClass注释A类使用Table子类或Table for Concrete Class inhertience strategy