让我们说,我的课程employeeId
包含字段name
和PermanentEmployee
。这是由另一个类salary
继承的,其中包含字段experience
和@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
。我使用employeeId
。从这里我明白它会创建两个表。一个用于父类,包含两列name
和name
。具有四列的子类的另一个表。这是employeeid
,salary
,experience
和@OneToOne
。
当我尝试使用所有四个值保留子对象(永久员工)时,它正在插入在子表中。 仅限子表。它没有插入父表。
[1]这是默认行为吗?还是我错过了什么?我需要像@Inheritance(strategy = InheritanceType.JOINED)
映射这样的实体关系吗?
[旁注]我也试过11:07:51 [Apache] Apache Service detected with wrong path
11:07:51 [Apache] Change XAMPP Apache and Control Panel settings or
11:07:51 [Apache] Uninstall/disable the other service manually first
11:07:51 [Apache] Found Path:"D:\file3\install\xampp1\apache\bin\httpd.exe" -k runservice
11:07:51 [Apache] Expected Path: "c:\xampp1\apache\bin\httpd.exe" -k runservice
11:07:51 [mysql] MySQL Service detected with wrong path
11:07:51 [mysql] Change XAMPP MySQL and Control Panel settings or
11:07:51 [mysql] Uninstall/disable the other service manually first
11:07:51 [mysql] Found Path: D:\file3\install\xampp1\mysql\bin\mysqld.exe --defaults-file=d:\file3\install\xampp1\mysql\bin\my.ini mysql
11:07:51 [mysql] Expected Path: c:\xampp1\mysql\bin\mysqld.exe --defaults-file=c:\xampp1\mysql\bin\my.ini mysql
11:07:51 [main] Starting Check-Timer
11:07:51 [main] Control Panel Ready
。这次使用Table per subclass,它为它们创建了两个表和外键关系。并将其插入表中。
答案 0 :(得分:0)
是的,如果您使用的是@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
,则该实体将被持久保存到单个表中,该表代表持久化实体的类。它可能对性能有好处,因为您在获取实体实例时不必进行表连接。但它也有缺点,例如,表没有规范化,层次结构中父级的修改会导致所有子表中的更改。在大多数情况下,这种策略并不是建议的,尽管它是最简单的策略。
至于OneToOne
,如果你的意思是,你必须提供父类和它的子类之间的关系,那么没有。它用于在两个或多个实例之间建立关系,而不是用于类层次结构。