OpenJPA (5)
7 Inheritance
??? 对象使用引用以便关联到其它对象;关系型数据库表之间采用外键来描述表的关系。在关系型数据库中通常没有自然且有效的方法来描述类的继承关系。JPA通过Inheritance annotation提供了几种继承策略,它有以下属性:
?? 关于Inheritance的更多内容,可以参考Hibernate实战by Christian Bauer, Gavin King。
?
7.1 Single Table
??? InheritanceType.SINGLE_TABLE 策略为类的继承体系采用同一个表。表名是基类的名称。例如:
mysql> select * from base;+----+----------+| id | baseName |+----+----------+| 1 | base |+----+----------+mysql> select * from derived1;+----+-----------------+--------------+| id | baseName | derived1Name |+----+-----------------+--------------+| 1 | derived1's base | derived1 |+----+-----------------+--------------+mysql> select * from derived2;+----+-----------------+--------------+| id | baseName | derived2Name |+----+-----------------+--------------+| 1 | derived2's base | derived2 |+----+-----------------+--------------+
?
7.3.1 Advantages
??? 对于已知class类型的实例来说,这个策略十分有效。跟InheritanceType.JOINED策略类似,当有新的子类加入到类的继承体系中时,已有表的schema无须修改。
7.3.2 Disadvantages
??? 这个策略在处理多态关系的时候会存在很多限制,此时某个引用(或者集合中的引用)可能指向任何子类的实例。由于无法使用关联查询,因此在查询的时候可能需要使用多个SQL语句或者使用UNION。