Hibernate鉴别器列与每个子类的表

时间:2011-06-01 14:28:52

标签: java hibernate

现在我正在使用每个子类的方法来建模我的数据。我的层次结构的简化是:

abstract class Abstract {
    /* common data stored in abstract */
}

class ConcreteTypeA1 extends Abstract {
    /* extra data stored in concrete_type_a_1 */
}

class ConcreteTypeA2 extends Abstract {
    /* extra data stored in concrete_type_a_2 */
}

class ConcreteTypeB extends Abstract {
    /* extra data stored in concrete_type_b */
}

所以它做了三个外连接,我抓住了Abstract类型的实例(实际上它是十二个)。我昨天意识到,ConcreteTypeA1和ConcreteTypeA2确实具有相同的额外数据,它们只是表现不同,所以我想做的是通过将这两个类填充到一个表中并使用鉴别器列来减少连接数。我怎样才能做到这一点?

class Abstract {
    /* common data stored in abstract */
}

abstract class ConcreteTypeA extends Abstract {
    /* extra data stored in abstract_type_a */
}

class ConcreteTypeA1 extends ConcreteTypeA {
    /* just behavior, no extra data, uses data in abstract_type_a */
}

class ConcreteTypeA2 extends ConcreteTypeA {
    /* just behavior, no extra data, uses data in abstract_type_a */
}

class ConcreteTypeB extends Abstract {
    /* extra data stored in concrete_type_b */
}

2 个答案:

答案 0 :(得分:1)

在Parent class上使用它

@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(
    name="type",
    discriminatorType=DiscriminatorType.STRING)

并在具体类上使用

@DiscriminatorValue("TypeA")

答案 1 :(得分:1)

根据Vincents的建议,使用了这个问题的回答。

How to mix inheritance strategies with JPA annotations and Hibernate?