我有这样的结构:
抽象类A
抽象类B延伸A
抽象类C扩展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
{
}
@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之间有一个dicatoriminator列,它是discriminatorA。
我在B和C之间有一个鉴别器列,它是鉴别器B.
A和B之间的继承有效。 B和C之间的继承不起作用。我读到了这一点:
11.1.10 DiscriminatorColumn Annotation
对于SINGLE_TABLE映射策略,通常也用于JOINED策略,持久性提供程序将使用类型鉴别器列。 DiscriminatorColumn注释用于定义SINGLE_TABLE和JOINED继承映射策略的鉴别器列。
策略和鉴别器列仅在实体类层次结构或子层次结构的根中指定,其中应用了不同的继承策略。
有没有人知道如何进行此映射?
感谢。
答案 0 :(得分:0)
删除它:
@DiscriminatorColumn(name="DISCRIMINATOR_B",discriminatorType=DiscriminatorType.STRING)
每个层次结构有一次鉴别器列就足够了。此层次结构中的所有实体都将在TAB_A中具有行(在实体A中定义)。如果使用连接继承策略(多个表),这也足够了。
映射的其他问题: