类继承树映射成一张表

来源:互联网 发布:居住区绿地率一般数据 编辑:程序博客网 时间:2024/04/29 22:45

表结构:

create table j_people2(   Id number,   Name varchar(20),   Age number,   type number,   School varchar(30),   Company varchar(30)   );

实体类People:

public class PeopleT  implements java.io.Serializable {    // Fields         private Long id;     private String name;     private int age;    /* private int type;     private String school;     private String company;*/     //实体类和数据表之间并不是一一对应关系,实体类存在实体类间的关系,数据表存在数据表的构造组织方式,hbm.xml映射文件是关联迁就双方的工具     //本来就不是完全映射的关系    // Constructors    /** default constructor */    public PeopleT() {    }public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}        }


子类Student:

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

子类Staff:

public class Staff extends PeopleT{ private String company;public String getCompany() {return company;}public void setCompany(String company) {this.company = company;}}

关键的映射文件:

<hibernate-mapping>    <class name="com.sjr.bean.PeopleT" table="J_PEOPLE2" schema="SXBBKF" discriminator-value="not null">   --这里是调整鉴别器的        <id name="id" type="long">            <column name="ID" precision="22" scale="0" />            <generator class="native"></generator>        </id>                 <discriminator column="type" type="int"/>  --默认为string,需要转化才可以int等其他类型                 <property name="name" type="string">            <column name="NAME" length="20" />        </property>        <property name="age" type="int">            <column name="AGE" precision="22" scale="0" />        </property>                <subclass name="com.sjr.bean.Student" discriminator-value='1'>        <property name="school"></property>        </subclass>                <subclass name="com.sjr.bean.Staff" discriminator-value='2'>        <property name="company"></property>        </subclass>                <!--        <property name="school" type="string">            <column name="SCHOOL" length="30" />        </property>        <property name="company" type="string">            <column name="COMPANY" length="30" />        </property>        -->                </class></hibernate-mapping>

结果:

Hibernate: select hibernate_sequence.nextval from dualHibernate: select hibernate_sequence.nextval from dualHibernate: insert into SXBBKF.J_PEOPLE2 (NAME, AGE, school, type, ID) values (?, ?, ?, 1, ?)Hibernate: insert into SXBBKF.J_PEOPLE2 (NAME, AGE, company, type, ID) values (?, ?, ?, 2, ?)



0 0
原创粉丝点击