【发布时间】:2012-03-27 13:01:54
【问题描述】:
我有这样的结构:
abstract class A
abstract class B extends A
abstract class C extends B
这是我的实际映射:
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Table(name = "TAB_A")
@DiscriminatorColumn(name = "DISCRIMINATOR_A",
discriminatorType = DiscriminatorType.STRING)
public abstract class A {
}
@Entity
@DiscriminatorValue("VALUE")
@SecondaryTable(name = "TAB_B",
pkJoinColumns = @PrimaryKeyJoinColumn(name="ID_A"))
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "DISCRIMINATOR_B",
discriminatorType = DiscriminatorType.STRING)
public abstract class B extends A
{
}
@Entity
@DiscriminatorValue("VALUEB")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public abstract class C extends B
{
}
我在 A 和 B 之间有一个鉴别器列 discriminatorA。
我在 B 和 C 之间有一个鉴别器列 discriminatorB。
A 和 B 之间的继承有效。 B 和 C 之间的继承不起作用。我读到了这一点:
11.1.10 DiscriminatorColumn 注解
对于 SINGLE_TABLE 映射策略,通常也适用于 JOINED 策略,持久性提供程序将使用类型鉴别器列。 DiscriminatorColumn 注解用于定义 SINGLE_TABLE 和 JOINED 继承映射策略的鉴别器列。
策略和鉴别器列仅在应用了不同继承策略的实体类层次结构或子层次结构的根中指定。
有人知道如何制作这个映射吗?
【问题讨论】:
-
所以 JPA 允许每个继承树有 1 个鉴别器。
-
...“或应用不同继承策略的子层次结构”。您在子层次结构中使用了相同的继承策略。
标签: java hibernate jpa inheritance