Hibernate学习笔记:继承映射之每个类继承结构一张表

来源:互联网 发布:chris evans 知乎 编辑:程序博客网 时间:2024/05/17 06:59

对象之间除了拥有,使用的关系,还有继承关系。Hibernate在作继承关系映射的时候有多种做法,今天学习第一种:每个类继承结构一张表,也就是说父类和子类在一张表中, 通过额外字段区分子类型。为了演示这种映射关系的做法,本文引入了四个对象,Animal, Monkey, Tiger,Zoo. MonkeyTiger继承自Animal. 每个Animal都归属一个动物园Zoo,关系表animal(id, name, zoo_id,age, kind, animal_type), 其中animal_type用来标识子类是Tiger还是Monkey, agemonkey的专有属性, kindtiger的专有属性。 关系表zoo(id, name, address).

Zoo.hbm.xml:

只有父类Animal有映射文件, 子类的配置通过subclass来标识。

Animal.hbm.xml:

dao和测试用例:

在向数据库中填充测试数据的时候注意animal_type的数据,本例用"MONKEY"和"TIGER"来标识子类, 所以最好对这个字段有约束。

这种做法的优点是:简单, 增加子类方便,数据存储快(因为在一张表中),方便制作报表;

这种做法的优点是:耦合性高; 潜在的数据空间浪费。

需要注意的是 子类专有的字段不能有非空约束