Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate每个具体类的表行为_Java_Hibernate_Inheritance - Fatal编程技术网

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的本机代码,则必须重新生成查询以使用联接