我用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
我做错了什么?
2条答案
按热度按时间d7v8vwbk1#
你没做错什么**
当你使用
InheritanceType.TABLE_PER_CLASS
时,你不能直接指定父实体的表名。父表的名称通常派生自父实体类的名称。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表,这些表不再是实现的一部分。因此,在每个应用程序重新启动后,我会删除旧表,它不是应用程序的一部分。