您的位置:首页 > 数据库

Hibernate 继承关系映射——共享一个数据库表

2016-12-10 14:23 337 查看

                                             共享一个数据库表

采用“共享一个数据库表”的方式实现继承关系映射,Hibernate中,使用了Discriminator(辨别标志)来解决这个问题。

1、只需要建一张Student表,如下



2、创建jiva工程share_mapping



3、自己需要创建Yjs.java,Bks.java

Student.java会自动生成,

Yjs.java代码

package org.vo;

public class Yjs extends Student{
private String researchResult;

public String getResearchResult() {
return researchResult;
}

public void setResearchResult(String researchResult) {
this.researchResult = researchResult;
}

}


Bks.java

package org.vo;

public class Bks extends Student{
private Boolean ky;

public Boolean getKy() {
return ky;
}

public void setKy(Boolean ky) {
this.ky = ky;
}

}


配置Student.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>
<class name="org.vo.Student" table="student" schema="dbo" catalog="Test">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native" />
</id>
<!-- 辨别标志 -->
<discriminator column="xsType" type="java.lang.String"></discriminator>

<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>
<!-- 使用<subclass>标签定义子类的特有属性与数据库对应关系,并且指明用于识别该子类的值 -->
<subclass name="org.vo.Yjs" discriminator-value="yjs">
<property name="researchResult" type="java.lang.String">
<column name="researchResult" length="50" />
</property>
</subclass>

<subclass name="org.vo.Bks" discriminator-value="bks">
<property name="ky" type="java.lang.Boolean">
<column name="ky" />
</property>
</subclass>
</class>
</hibernate-mapping>


测试代码:

package org.test;

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 shareTest {
Session session=HibernateSessionFactory.getSession();

public static void main(String[] args) {
// TODO Auto-generated method stub
shareTest st=new shareTest();
st.saveBks();
st.saveYjs();
st.query();
HibernateSessionFactory.closeSession();

}
public void saveYjs(){
Transaction ts=session.beginTransaction();
Yjs yjs=new Yjs();
yjs.setXh("201401090122");
yjs.setXm("pengtao");
yjs.setBir("1996-09-18");
yjs.setResearchResult("5项成果");
session.save(yjs);
ts.commit();
}
public void saveBks(){
Transaction ts=session.beginTransaction();
Bks bks=new Bks();
bks.setXh("201501090115");
bks.setXm("tanyu");
bks.setBir("1998-01-14");
bks.setKy(true);
session.save(bks);
ts.commit();
}
public void query(){
List list=session.createQuery("from Student where xsType='yjs'").list();
for(int i=0;i<list.size();i++){
Yjs yjs=(Yjs)list.get(i);
System.out.println(yjs.getXh()+"--->"+yjs.getXm()+"--->"+yjs.getResearchResult());
}
List list1=session.createQuery("from Yjs").list();
for(int i=0;i<list1.size();i++){
Yjs yjs=(Yjs)list1.get(i);
System.out.println(yjs.getXh()+"--->"+yjs.getXm()+"--->"+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.println(bks.getXh()+"--->"+bks.getXm()+"--->"+bks.getKy());

}
}

}


运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: