hibernate 承袭映射 例子

hibernate 继承映射 例子
关键字: hibernate
  在对象模型之中有一种继承关系,当然也可以把这些关系映射到关系型数据库表中比如说有一个种族,他的名字叫做People,

Java代码
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;  
    }  


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继承而来,现在我们需要把他们映射到数据库中

Java代码
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;  
    }  


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代码
<?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> 

<?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继承映射到一张表里面

Java代码
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);  
    }  


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继承映射都比较少用。