jpa继承总结

来源:互联网 发布:win10怎么网络唤醒设置 编辑:程序博客网 时间:2024/06/05 16:45
3.1    一个继承结构使用一个表(Table per class hierarchy)
这种方法在JPA中是InheritanceType.SINGLE_TABLE。
优点:简单,性能好,是多态操作性能最好的方式。
缺点:子类的字段必须定义成nullable,数据可能不是规范化的,存在数据一致性和易维护问题。
适用:简单继承结构,特别是子类属性比较少的情况。

3.2    各子类使用单独的表(Table per subclass)
这种方法在JPA中是InheritanceType.JOINED。
优点:数据是规范化的,支持多态查询和多态关联。
缺点:对复杂的继承结构,该方法性能不好。
适用:需要多态查询和多态关联,特别是子类的属性较多的情况。(没有父类的属性)

3.3    支持多态的各具体实体类使用单独的表(Table per concrete class with implicit polymorphism)。
优点:比较简单。 MappedSuperclass(被继承的不会生成表)
缺点:对多态关联的支持不好,多态查询也有问题(一个多态查询需要对应多条查询语句)。
适用:复杂继承结构中的顶层结构(一般不需要多态操作),并且基类修改的可能性不大的情况。特别适用于不采用JPA接口(如JDBC)的查询。

3.4    采用Union的各具体实体类使用单独的表(Table per concrete class with unions)
这种方式在JPA中是InheritanceType.TABLE_PER_CLASS。
优点:支持多态查询和多态关联。
缺点:TABLE_PER_CLASS在JPA中是可选的,也就是说不能保证每个EJB 3.0的容器都支持这种方式。
适用:如果需要考虑可移植性问题,不推荐使用本方法。
注意:一旦使用这种策略后主键生成策略就不能使用 AUTO  和 IDENTITY 了。