【发布时间】:2012-01-26 04:39:54
【问题描述】:
我们通过 Hibernate 自动创建表,方法是:
@Table(name = "some_table")
这曾经适用于“正常”实体。但是当我们有一个抽象基类时:
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class PersonBankAccount extends AbstractPersistable<Long> {
由
扩展@Entity
@Table(name = "person_bank_account")
public class PersonBankAccountSimple extends PersonBankAccount {
数据库中的结果表被命名
personbankaccount
这是怎么回事?
自动生成器说:
table not found: PersonBankAccount
当第一次创建它并重新运行时,他说:
table found: personbankaccount
就像我说的,对于普通的桌子,一切正常。
【问题讨论】:
-
不确定是否相关,但是在使用单表继承策略时需要指定鉴别器列和值。
-
@Perception 我认为您必须提供鉴别器列。 JPA 2.0 FR 规范说(11.1.10“DiscriminatorColumn Annotation”):“如果缺少 DiscriminatorColumn 注释,并且需要一个鉴别器列,则鉴别器列的名称默认为“DTYPE”,鉴别器类型为 STRING 。”
-
是的,他会自动执行此操作。想知道那些 DTYPE 列是从哪里来的……;)如果我在每个目标应用程序中总是只有一个扩展类,我真的可以禁用这些列吗?