在对象模型之中有一种继承关系,当然也可以把这些关系映射到关系型数据库表中比如说有一个种族,他的名字叫做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继承映射都比较少用,今天就不讨论了