Hibernate继承层次结构中的MultiDiscriminator列

时间:2012-03-27 13:01:54

标签: hibernate inheritance jpa discriminator

我有这样的结构:

抽象类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继承映射策略的鉴别器列。

策略和鉴别器列仅在实体类层次结构或子层次结构的根中指定,其中应用了不同的继承策略。

有没有人知道如何进行此映射?

感谢。

1 个答案:

答案 0 :(得分:0)

删除它:

@DiscriminatorColumn(name="DISCRIMINATOR_B",discriminatorType=DiscriminatorType.STRING)

每个层次结构有一次鉴别器列就足够了。此层次结构中的所有实体都将在TAB_A中具有行(在实体A中定义)。如果使用连接继承策略(多个表),这也足够了。

映射的其他问题: