java - 每个子类都有表的 Hibernate 鉴别器列

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

所以它执行三个外部连接,我在其中获取抽象类型的实例(实际上是十二个)。我昨天意识到 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")

关于java - 每个子类都有表的 Hibernate 鉴别器列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6202816/

相关文章:

Java Excel I/0 问题

java - 全包字符集以避免 "java.nio.charset.MalformedInputException: Input length = 1"?

java - 使用 MySQL 更改预计值

java - setDisplayHomeAsUpEnabled()错误: non-static method cannot be referenced from a static context

java - @Autowired注解spring mvc

java - 将 ArrayList 的每个元素添加到另一个 ArrayList 的每个元素

mysql - Hibernate HQL - 从今天开始获取下一个日期的实体

mysql - 如何使用 Play、Hibernate 和 MySql 设置每个 session 的事务隔离级别

java - Hibernate @Formula 注释在 Hibernate 不恰本地插入表引用时导致 sql 异常错误

java - 调用 Hibernate session 刷新