现在,我在每个子类中使用一个表来对数据建模。我的层次结构的简化是:

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 */
}

最佳答案

在家长课堂上使用

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


并在具体课程上使用

@DiscriminatorValue("TypeA")

10-07 13:16