我有这个奇怪的层次结构:
- 类
A
是抽象的(但它是一个实体) - 类
B
(抽象)和C都扩展了类A
(TABLE_PER_CLASS)。 - 类
B
也由类D
和E
扩展,但这次它是 JOINED。
我希望A
类的ID
是所有其他类的ID
。
这能做到吗?
我收到奇怪的ID错误。 谁能告诉我如何映射?
我是这样做的:
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class A {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
protected Integer id;
}
C类:
@Entity
@Table(name = "managers")
public class C extends A {
B类:
@Entity
@Table(name = "bb")
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "discriminator", discriminatorType = DiscriminatorType.STRING)
public abstract class B extends A {
C,D类:
@Entity
@Table(name = "cc"/"dd")
@DiscriminatorValue("CC"/"DD")
public class C (or D) extends B {
虽然在继承树中混合继承策略可以完成(https://stackoverflow.com/a/3916998/131929 指的是 Java Persistence with Hibernate(英语:Java Persistence with Hibernate)-> 5.1.5 混合继承策略(p207-p210)) 我和我认识的其他人都建议不要这样做。
旁注,我建议您始终使用@MappedSuperclass
而不是@Entity
抽象类。