Java Hibernate每个具体类的表行为
比如说,我有一个类Java Hibernate每个具体类的表行为,java,hibernate,inheritance,Java,Hibernate,Inheritance,比如说,我有一个类Employee,其中包含employeeId和name字段。这由另一个类永久员工继承,字段为工资和经验。我使用了@inheritation(strategy=InheritanceType.TABLE\u PER\u CLASS)因此我知道它将创建两个表。一个用于父类,有两列employeeId和name。具有四列的子类的另一个表。也就是说,name、employeeid、salary和experience当我尝试用所有四个值持久化子对象(永久雇员)时,它会插入子表中仅在子表
Employee
,其中包含employeeId
和name
字段。这由另一个类永久员工
继承,字段为工资
和经验
。我使用了@inheritation(strategy=InheritanceType.TABLE\u PER\u CLASS)
因此我知道它将创建两个表。一个用于父类,有两列
employeeId
和name
。具有四列的子类的另一个表。也就是说,name
、employeeid
、salary
和experience
当我尝试用所有四个值持久化子对象(永久雇员)时,它会插入子表中仅在子表中。它没有插入到父表中。
[1]这是默认行为吗?还是我遗漏了什么?我需要像
@OneToOne
映射这样的实体关系吗?[旁注]我还尝试了
@heritance(strategy=heritancetype.JOINED)
。这次使用每个子类一个表,它将为它们创建两个表和外键关系。并将其插入两个表中 是,如果您使用的是继承(strategy=InheritanceType.TABLE\u PER\u CLASS),则实体将被持久化到单个表中,该表表示持久化实体的类。这可能有利于性能,因为您不必在获取实体实例时进行表连接。但它也有一个缺点,例如,表没有规范化,修改层次结构中的父表会导致所有子表发生更改。在大多数情况下,虽然这是最简单的策略,但不推荐使用此策略
至于
OneToOne
,如果您的意思是必须提供父类和它的子类之间的关系,那么不是。它用于在两个或多个实例之间建立关系,而不是类层次结构。那么我应该怎么做,如果我需要将此“每个类的表”的数据保留在父级和子级中。有什么解决办法吗?您必须使用不同的策略,然后jpa将为您创建带有连接选择的规范化表。如果您只使用hibernate,您将看不到任何区别,但是如果您有一些带有selects的本机代码,则必须重新生成查询以使用联接