中间的`@MappedSuperclass`未能持久化

时间:2013-03-04 09:59:10

标签: jpa eclipselink

我有三个类看起来像这样。

@Entity
class A {

    @Id @GeneratedValue @TableGenerator
    private long id;
}

@MappedSuperclass
abstract class B extends A {
}

@Entity
class C extends B {
}

上面应该工作吗?至少使用EclipseLink似乎不起作用。

当我尝试保留Column 'ID' cannot be null的实例时,我得到C

我在Inheritance with abstract intermediate class using @MappedSuperclass fails to populate subclasses发现了一个错误,但我不确定它是否完全相同。

根据@ James的回复更新

对不起,我应该写得更详细。是的我打算继续使用SINGLE_TABLE。我没有BC的任何扩展属性。它只是一个分层的类设计。

@DiscriminatorColumn
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Entity
abstract class A {

    @Id @GeneratedValue @TableGenerator
    private long id;
}

@DiscriminatorValue("B") @Entity // I currently should do like this.
//@MappedSuperclass              // error
abstract class B<T extends SomeoneElse> extends A {
}

@DiscriminatorValue("C")
@Entity
class C extends B<James> {
}

1 个答案:

答案 0 :(得分:1)

我相信在JPA中,@ MappedSuperclass必须是超类而不是子类(如其名称推断)。

我不确定@Epedy子类与@MappedSuperclass的含义是什么意思?

你想做什么?

对于@Entity继承,JPA只提供三个选项,SINGLE_TABLE,JOINED和TABLE_PER_CLASS。所有持久化子类都必须是实体。

我假设您正在使用JOINED继承并尝试避免使用表B. JPA没有指定执行此操作的标准方法。在EclipseLink中,您可以通过使表与父表匹配来避免表(@Table(name =“A”))。