首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

OpenJPA (五)

2012-11-18 
OpenJPA (5)7 Inheritance??? 对象使用引用以便关联到其它对象;关系型数据库表之间采用外键来描述表的关系

OpenJPA (5)

7 Inheritance
??? 对象使用引用以便关联到其它对象;关系型数据库表之间采用外键来描述表的关系。在关系型数据库中通常没有自然且有效的方法来描述类的继承关系。JPA通过Inheritance annotation提供了几种继承策略,它有以下属性:

InheritanceType strategy:用来声明继承策略。可选值是InheritanceType.SINGLE_TABLE、InheritanceType.JOINED和InheritanceType .TABLE_PER_CLASS。缺省值是InheritanceType.SINGLE_TABLE。

?? 关于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。

热点排行