在对象模型之中有一种继承关系,当然也可以把这些关系映射到关系型数据库表中比如说有一个种族,他的名字叫做People,
package com.hibernate; public class People { private int id ; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
五百年后有了American,Chinese...他们都有人People继承而来,现在我们需要把他们映射到数据库中
package com.hibernate; public class Chinese { private String pingpong; // 继承Peopel public String getPingpong() { return pingpong; } public void setPingpong(String pingpong) { this.pingpong = pingpong; } } package com.hibernate; public class American extends People { // 继承Peopel private String bascketball; public String getBascketball() { return bascketball; } public void setBascketball(String bascketball) { this.bascketball = bascketball; } }
现在配置配置文件方便映射到数据库中
<?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> <class name="com.hibernate.People"> <id name="id"> <generator class="native"/> <!--自增方式生成主键---> </id> <discriminator column="type" type="string"/> <!--鉴别器---> <property name="name"/> <subclass name="com.hibernate.Chinese" discriminator-value="C"> <property name="pingpong"/> </subclass> <subclass name="com.hibernate.American" discriminator-value="A"> <property name="bascketball"/> </subclass> </class> </hibernate-mapping>
好了,现在可以写一个数据库映射的导出类将Peopel,Chinese,Americand都同过Hibernate继承映射到一张表里面
package com.hibernate; import org.hibernate.cfg.Configuration; import org.hibernate.tool.hbm2ddl.SchemaExport; public class ExportDB { public static void main(String[] args) { Configuration cfg = new Configuration().configure(); SchemaExport schemaExport = new SchemaExport(cfg); schemaExport.create(true, true); } }
运行SchemaExport,OK。 Hibernate继承映射到一张表里面了
mysql> desc people;
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| type | varchar(255) | NO | | NULL | |
| name | varchar(255) | YES | | NULL | |
| pingpong | varchar(255) | YES | | NULL | |
| bascketball | varchar(255) | YES | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
这种Hibernate继承映射,是一种比较常用的方式,还有另外两种 Hibernate继承映射,其他的两种 Hibernate继承映射生成的表和类都是一一对应的,即有多张表。一般那样的 Hibernate继承映射都比较少用,今天就不讨论了