类(Person) , 男人(Men)继承"人"类, 女人(Women)继承"人"类, UML如下:
映射到三张表 , 每一个具体的类 映射到一张表,继承映射要求父子类的主键不能重复
t_person表 :
1 int id //主键
2 varchar name //父类中的姓名
3 int age //父类中的年龄
t_men表 :
1 int id //主键
2 varchar name //父类中的姓名
3 int age
4 varchar a //"男人"类扩展的属性
t_women表 :
1 int id //主键
2 varchar name //父类中的姓名
3 int age
4 varchar b //"女人"类 扩展的 属性
Person, Men, Women 三个类这里就不显示了,但简单, 想看了附件中有源码
Person.hbm.xml 如下:
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="extends_test.extends_4" auto-import="false"> <class name="Person" table="t_person4" > <!-- 父类的属性 --> <id name="id"> <!-- 重点 --> <!-- 不能用这种主键生成器 generator class="native" --> <!-- class="native" 主键是自增长的, 父子类的主键会重复,但继承映射要求不能重复 --> <!-- 高低位生 主键生成器 --> <generator class="hilo"/> </id> <property name="name"/><!-- 父类的属性 --> <property name="age"/><!-- 父类的属性 --> <!-- Mem子类的映射 --> <union-subclass name="Men" table="t_men4"> <!-- Men类专有的属性a --> <property name="a"/> </union-subclass> <!-- Women子类的映射 --> <union-subclass name="Women" table="t_women4"> <!-- Men类专有的属性a --> <property name="b"/> </union-subclass> </class> </hibernate-mapping>
保存与查询操作: 略... 见14,15讲