0

我的三个班是这样的。

@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.

我在使用@MappedSuperclass 的抽象中间类继承中发现了一个错误,无法填充子类,但我不确定它是否完全相同。

根据@James的回答更新

对不起,我应该写得更冗长。是的,我打算继承 SINGLE_TABLE。我没有任何带有Bnor的扩展属性C。这只是一个分层的类设计。

@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> {
}
4

1 回答 1

1

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

我不确定将@Entiy 子类作为@MappedSuperclass 意味着什么?

你想做什么?

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

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

于 2013-03-04T15:56:18.663 回答