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