下面这三种继承策略进行一下对比,如表所示。
表 三种继承策略对比
继承策略 |
继承关系的实体保存在一个表(SINGLE_TABLE) |
每个实体子类保存在一个表(JOINED) |
每个实体类保存在一个表(TABLE_PER_CLASS) |
映射的表 |
所有实体属性映射的字段都保存在该表,并且有一个标识类型的字段 |
一个顶层的父类映射的表,其他每个子类映射为一个表,并且每个子类通过父类与主键关联,也可以使用标识类型的字段 |
每个实体映射为一个表,并且每个表都包含实体的所有属性。 |
表中是否需要类标识 |
是 |
是 |
否 |
优势 |
支持多态(polymorphic)查询,并且查询效率高。 |
支持多态查询,并且查询效率高。 |
|
劣势 |
要允许字段为null,否则一些子类实体将不能映射。 |
当进行Join关联查询时,效率比较低。 |
虽然支持多态查询,但由于查询多个表,所以查询的效率比较低,所以一般不建议使用这种策略。 |
提示:有关多态的内容将在7.4小节讲述,有关查询将在第9章讲述。