Hibernate继承映射简单入门

来源:互联网 发布:网络小手分享论 编辑:程序博客网 时间:2024/06/06 01:02

首先,映射继承分三种
1。一个类的继承树一个表
基于xml
Teacher类

public class Teacher {    private Integer id;    private 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;    }}

子类Class_Teacher

public class Class_Teacher extends Teacher{    private String classId;    private Integer classNumber;     private Integer ground;    public Class_Teacher() {        super();    }    public Class_Teacher(String classId, Integer classNumber, Integer ground) {        super();        this.classId = classId;        this.classNumber = classNumber;        this.ground = ground;    }    public String getClassId() {        return classId;    }    public void setClassId(String classId) {        this.classId = classId;    }    public Integer getClassNumber() {        return classNumber;    }    public void setClassNumber(Integer classNumber) {        this.classNumber = classNumber;    }    public Integer getGround() {        return ground;    }    public void setGround(Integer ground) {        this.ground = ground;    }}

子类Info_Teacher

public class Info_Teacher extends Teacher{    private String weight;    private String height;    public String getWeight() {        return weight;    }    public void setWeight(String weight) {        this.weight = weight;    }    public String getHeight() {        return height;    }    public void setHeight(String height) {        this.height = height;    }}

teacher.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>    <class name="com.north.java.Hibernate.Teacher.Teacher" table="Teacher">      <id name="id" type="java.lang.Integer">        <column name="ID" />        <generator class="native" />    </id>    <discriminator column="type" type="string"/>      <property name="Name"></property>      <subclass name="com.north.java.Hibernate.Teacher.Class_Teacher"     discriminator-value="class_teacher">        <property name="classId"></property>        <property name="classNumber"></property>        <property name="ground"></property>    </subclass>    <subclass name="com.north.java.Hibernate.Teacher.Info_Teacher"     discriminator-value="info_teacher">        <property name="weight"></property>        <property name="height"></property>    </subclass>  </class>   </hibernate-mapping>

在hibernate的配置文件添加
<mapping resource="com/north/java/Hibernate/Teacher/Teacher1.hbm.xml"/>

创建和储存

public class TestTeacher {    public static void main(String[] args) {        // TODO Auto-generated method stub        TestTeacher tt = new TestTeacher();        Class_Teacher ct =  new Class_Teacher("2,3", 2, 3);        ct.setName("BB");        Info_Teacher it = new Info_Teacher();        it.setHeight("170");        it.setWeight("100");        it.setName("CC");        tt.CreateTeacher("AA", ct, it);        HibernateUtil.getSessionFactory().close();    }    public void CreateTeacher(String name, Class_Teacher ct, Info_Teacher it) {        //HibernateUtil是工具类,返回SessionFactory对象        Session session = HibernateUtil.getSessionFactory().getCurrentSession();        session.beginTransaction();        Teacher teacher = new Teacher();        teacher.setName(name);        session.save(teacher);        session.save(ct);        session.save(it);        session.getTransaction().commit();    }}

结果
这里写图片描述

基于注解
Teacher类

@Entity@Table(name="TeacherAnnoation")@Inheritance(strategy=InheritanceType.SINGLE_TABLE)@DiscriminatorColumn(name="type",discriminatorType=DiscriminatorType.STRING)@DiscriminatorValue(value="teacher")public class Teacher {    @Id    @GeneratedValue(strategy=GenerationType.AUTO)    @Column(name="id")    private Integer id;    @Column(name="name")    private 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;    }}

Class_Teacher类

加上@Entity@DiscriminatorValue("class_taecher")

Info_Teacher类

加上@Entity@DiscriminatorValue("info_teacher")


hibernate的配置文件中
添加

<mapping class="com.north.java.Hibernate.Teacher.Teacher"></mapping>        <mapping class="com.north.java.Hibernate.Teacher.Class_Teacher"></mapping>        <mapping class="com.north.java.Hibernate.Teacher.Info_Teacher"></mapping>

结果
这里写图片描述

2.每一个字类一个表
基于xml
teacher.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>    <class name="com.north.java.Hibernate.Teacher.Teacher" table="Teacher2">      <id name="id" type="java.lang.Integer">        <column name="ID" />        <generator class="native" />    </id>    <property name="Name"></property>      <joined-subclass name="com.north.java.Hibernate.Teacher.Class_Teacher"     table="class_teacher2">        <key column="cid"/>         <property name="classId"></property>        <property name="classNumber"></property>        <property name="ground"></property>    </joined-subclass>    <joined-subclass name="com.north.java.Hibernate.Teacher.Info_Teacher"     table="info_teacher2">         <key column="iid"/>         <property name="weight"></property>        <property name="height"></property>    </joined-subclass>  </class>   </hibernate-mapping>

结果

基于注解
teacher类
加上

@Entity@Table(name="TeacherAnnoation1")@Inheritance(strategy=InheritanceType.JOINED)

class_Teacher类

加上

@Entity@Table(name="class_table_annotion1")@PrimaryKeyJoinColumn(name="ID")

info_Teacher类
加上

@Entity@Table(name="info_table_annotion1")@PrimaryKeyJoinColumn(name="ID")

结果
TeacherAnnoation1表
这里写图片描述
class_table_annotion1表
这里写图片描述
info_table_annotion1表
这里写图片描述

3.每个类一张表
基于xml
Teacher.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>    <class name="com.north.java.Hibernate.Teacher.Teacher" table="Teacher1">      <id name="id" type="java.lang.Integer">        <column name="ID" />        <generator class="assigned" />    </id>    <property name="Name"></property>      <union-subclass name="com.north.java.Hibernate.Teacher.Class_Teacher"     table="class_teacher1">        <property name="classId"></property>        <property name="classNumber"></property>        <property name="ground"></property>    </union-subclass>    <union-subclass name="com.north.java.Hibernate.Teacher.Info_Teacher"     table="info_teacher1">        <property name="weight"></property>        <property name="height"></property>    </union-subclass>  </class>   </hibernate-mapping>

注意这个的id是要自己添加的
class_teacher表
这里写图片描述
info_teacher表
这里写图片描述

基于注解
teacher类加上

@Entity@Table(name="TeacherAnnoation2")@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)

Class_teacher类

@Entity@Table(name="class_table_annotion2")@AttributeOverrides({    @AttributeOverride(name = "id", column = @Column(name = "id")),    @AttributeOverride(name = "name", column = @Column(name = "name")) })

info_Teacher类

@Entity@Table(name="info_table_annotion2")@AttributeOverrides({    @AttributeOverride(name = "id", column = @Column(name = "id")),    @AttributeOverride(name = "name", column = @Column(name = "name")) })

结果
TeacherAnnoation2表
这里写图片描述
class_table_annotion2表
这里写图片描述
info_table_annotion2表
这里写图片描述

原创粉丝点击