Hibernate 继承映射(一)

来源:互联网 发布:php源码 微信企业号 编辑:程序博客网 时间:2024/06/17 17:58

首先是:数据库表设计


然后实体类中的Person类

public class Person {protected Integer id;protected String name;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}}

学生继承Person。

public class Student extends Person {private String school;public String getSchool() {return school;}public void setSchool(String school) {this.school = school;}}

然后Worker继承Person

public class Worker extends Person{private String factory;public String getFactory() {return factory;}public void setFactory(String factory) {this.factory = factory;}}

然后配置Person.hbm.xml

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping package="entity">    <class name="Person" table="person">        <id name="id" type="java.lang.Integer" column="id">            <generator class="native"></generator>        </id>        <!-- 标志列,判断是student还是worker的列 -->        <discriminator column="type" type="string"></discriminator>        <property name="name" column="name" type="string"></property>        <!-- Student子类  并设置student的标志是student-->       <subclass name="Student" discriminator-value="student">       <property name="school" column="school" type="string"></property>       </subclass>       <!-- Worker子类 并设置worker的标志是worker-->       <subclass name="Worker" discriminator-value="worker">       <property name="factory" column="factory" type="string"></property>       </subclass>    </class></hibernate-mapping>
然后测试类

package Run;import org.hibernate.HibernateException;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;import entity.Student;import entity.Worker;public class Run{Session session=null;SessionFactory sf=null;public static void main(String[] args) {new Run().test1();}public void test1(){Student s1=new Student();s1.setName("新色");s1.setSchool("海淀中学");Worker w1=new Worker();w1.setName("老张2号");w1.setFactory("新水网");try {session=new Configuration().configure().buildSessionFactory().openSession();session.beginTransaction();session.save(s1);session.save(w1);session.beginTransaction().commit();} catch (HibernateException e) {e.printStackTrace();session.beginTransaction().rollback();}finally{if(session!=null)session.close();}}}

执行后控制台输出 

Hibernate: insert into person (name, school, type) values (?, ?, 'student')Hibernate: insert into person (name, factory, type) values (?, ?, 'worker')

再看数据库结果


原创粉丝点击