每个类一个数据表
这种方法父类和子类都要各自对应数据库中的一张表,并且子类和父类之间应用主键来设计他们的关联关系。
1、首先在Test数据库创建三张表
xs表
yjs表
bks表
2、添加Hibernate框架,建立POJO类
Xs.java
package org.vo;
/**
* Xs entity. @author MyEclipse Persistence Tools
*/
public class Xs implements java.io.Serializable {
// Fields
private Integer id;
private String xh;
private String xm;
private String bir;
// Constructors
/** default constructor */
public Xs() {
}
/** minimal constructor */
public Xs(String xh) {
this.xh = xh;
}
/** full constructor */
public Xs(String xh, String xm, String bir) {
this.xh = xh;
this.xm = xm;
this.bir = bir;
}
// Property accessors
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getXh() {
return this.xh;
}
public void setXh(String xh) {
this.xh = xh;
}
public String getXm() {
return this.xm;
}
public void setXm(String xm) {
this.xm = xm;
}
public String getBir() {
return this.bir;
}
public void setBir(String bir) {
this.bir = bir;
}
}
Yjs.java
package org.vo;
/**
* Yjs entity. @author MyEclipse Persistence Tools
*/
public class Yjs extends Xs {
// Fields
private Integer xsId;
private String researchResult;
// Constructors
/** default constructor */
public Yjs() {
}
/** minimal constructor */
public Yjs(Integer xsId) {
this.xsId = xsId;
}
/** full constructor */
public Yjs(Integer xsId, String researchResult) {
this.xsId = xsId;
this.researchResult = researchResult;
}
// Property accessors
public Integer getXsId() {
return this.xsId;
}
public void setXsId(Integer xsId) {
this.xsId = xsId;
}
public String getResearchResult() {
return this.researchResult;
}
public void setResearchResult(String researchResult) {
this.researchResult = researchResult;
}
}
Bks.java
package org.vo;
public class Bks extends Xs {
// Fields
private Integer xsId;
private Boolean ky;
// Constructors
/** default constructor */
public Bks() {
}
/** minimal constructor */
public Bks(Integer xsId) {
this.xsId = xsId;
}
/** full constructor */
public Bks(Integer xsId, Boolean ky) {
this.xsId = xsId;
this.ky = ky;
}
// Property accessors
public Integer getXsId() {
return this.xsId;
}
public void setXsId(Integer xsId) {
this.xsId = xsId;
}
public Boolean getKy() {
return this.ky;
}
public void setKy(Boolean ky) {
this.ky = ky;
}
}
配置Xs.hbm.xml。另外最重要的是其余两个配置文件要将映射清空(不能删除),否则会产生一个实体进行多次映射 ,会有这种错误 org.hibernate.InvalidMappingException
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="org.vo.Xs" table="xs" schema="dbo" catalog="Test">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native" />
</id>
<property name="xh" type="java.lang.String">
<column name="xh" length="50" not-null="true" />
</property>
<property name="xm" type="java.lang.String">
<column name="xm" length="50" />
</property>
<property name="bir" type="java.lang.String">
<column name="bir" length="50" />
</property>
<joined-subclass name="org.vo.Yjs" table="yjs">
<key column="xsId"></key>
<property name="researchResult" column="researchResult" type="java.lang.String">
</property>
</joined-subclass>
<joined-subclass name="org.vo.Bks" table="bks">
<key column="xsId"></key>
<property name="ky" column="ky" type="java.lang.Boolean"></property>
</joined-subclass>
</class>
</hibernate-mapping>
Bks.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
</hibernate-mapping>
3、测试类
package org.test;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.util.HibernateSessionFactory;
import org.vo.Bks;
import org.vo.Yjs;
public class Inheritance {
Session session=HibernateSessionFactory.getSession();
public static void main(String[] args){
Inheritance test=new Inheritance();
test.saveBks();
test.saveYjs();
test.query();
HibernateSessionFactory.closeSession();
}
public void saveYjs(){
Yjs yjs=new Yjs();
yjs.setXh("201401090122");
yjs.setXm("pengtao");
yjs.setResearchResult("5项研究成果");
yjs.setBir("1996-07-28");
Transaction ts=session.beginTransaction();
session.save(yjs);
ts.commit();
}
public void saveBks(){
Bks bks=new Bks();
bks.setXh("201501090122");
bks.setXm("tanyu");
bks.setKy(true);
bks.setBir("1998-01-14");
Transaction ts=session.beginTransaction();
session.save(bks);
ts.commit();
}
public void query(){
List list1=session.createQuery("from Yjs").list();
for(int i=0;i<list1.size();i++){
Yjs yjs=(Yjs)list1.get(i);
System.out.print(yjs.getXm()+"---->");
System.out.println(yjs.getResearchResult());
}
List list2=session.createQuery("from Bks").list();
for(int i=0;i<list2.size();i++){
Bks bks=(Bks)list2.get(i);
System.out.print(bks.getXm()+"---->");
System.out.println(bks.getKy());
}
}
}
运行结果