我有三个类看起来像这样。
@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。我没有B
或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> {
}
答案 0 :(得分:1)
我相信在JPA中,@ MappedSuperclass必须是超类而不是子类(如其名称推断)。
我不确定@Epedy子类与@MappedSuperclass的含义是什么意思?
你想做什么?
对于@Entity继承,JPA只提供三个选项,SINGLE_TABLE,JOINED和TABLE_PER_CLASS。所有持久化子类都必须是实体。
我假设您正在使用JOINED继承并尝试避免使用表B. JPA没有指定执行此操作的标准方法。在EclipseLink中,您可以通过使表与父表匹配来避免表(@Table(name =“A”))。