JPA:继承,TABLE_PER_CLASS设置父表名称

t98cgbkg  于 2023-10-20  发布在  Spring
关注(0)|答案(2)|浏览(162)

我用InheritanceType.TABLE_PER_CLASS。不知何故,我可以定义子表的名称,但不能定义父表的名称。

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@Table(name="foo")
public class Parent {
    ...
}

@Entity
@Table(name="bar")
public class Child extends Parent {
    ...
}

结果:

Schema |  Name  |  Typ   
--------+----------------
 public | parent | Table  
 public | bar    | Table

我做错了什么?

d7v8vwbk

d7v8vwbk1#

你没做错什么**
当你使用InheritanceType.TABLE_PER_CLASS时,你不能直接指定父实体的表名。父表的名称通常派生自父实体类的名称。

djp7away

djp7away2#

和往常一样,问题出在键盘前。。我
对于任何有同样问题的人,不想浪费太多时间的解决方案:
在策略InheritanceType.TABLE_PER_CLASS中有NO父表。父类的所有属性都直接存储在子表中。因此,如果没有父表,则不能重命名它!
但为什么会出现在我的数据库里?在选择InheritanceType.TABLE_PER_CLASS之前,我尝试了不同的策略,比如InheritanceType.JOINED,它实际上创建了一个父表。使用属性spring.jpa.hibernate.ddl-auto=create进行开发,我假设数据库将始终匹配我的java实现(https://stackoverflow.com/a/1689769/8345434)。但是,create只删除数据和not表,这些表不再是实现的一部分。因此,在每个应用程序重新启动后,我会删除旧表,它不是应用程序的一部分。

Schema |  Name  |  Typ  |  Creation Date  
--------+--------+-------+-----------------
 public | parent | Table | a long time ago 
 public | bar    | Table | now

相关问题