﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-冲上云霄-随笔分类-hibernate</title><link>http://www.blogjava.net/zhaosoft/category/35646.html</link><description>zhaosoft</description><language>zh-cn</language><lastBuildDate>Tue, 04 Nov 2008 13:15:35 GMT</lastBuildDate><pubDate>Tue, 04 Nov 2008 13:15:35 GMT</pubDate><ttl>60</ttl><item><title>hibernate：继承关系_整个继承树映射到一张表</title><link>http://www.blogjava.net/zhaosoft/archive/2008/11/03/238431.html</link><dc:creator>zhaosoft</dc:creator><author>zhaosoft</author><pubDate>Mon, 03 Nov 2008 13:13:00 GMT</pubDate><guid>http://www.blogjava.net/zhaosoft/archive/2008/11/03/238431.html</guid><wfw:comment>http://www.blogjava.net/zhaosoft/comments/238431.html</wfw:comment><comments>http://www.blogjava.net/zhaosoft/archive/2008/11/03/238431.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaosoft/comments/commentRss/238431.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaosoft/services/trackbacks/238431.html</trackback:ping><description><![CDATA[hibernate继承映射：<br />
<img style="width: 469px; height: 298px" height="298" alt="" src="http://www.blogjava.net/images/blogjava_net/zhaosoft/111.JPG" width="469" border="0" /><br />
domain类：<br />
Employee.java<br />
<p>package com.zhaosoft.domain;</p>
<p>public class Employee {</p>
<p>&nbsp;private int id;<br />
&nbsp;private String name;<br />
&nbsp;private Department depart;</p>
<p>&nbsp;public int getId() {<br />
&nbsp;&nbsp;return id;</p>
<p>&nbsp;}</p>
<p>&nbsp;public void setId(int id) {<br />
&nbsp;&nbsp;this.id = id;<br />
&nbsp;}</p>
<p>&nbsp;public String getName() {<br />
&nbsp;&nbsp;return name;<br />
&nbsp;}</p>
<p>&nbsp;public void setName(String name) {<br />
&nbsp;&nbsp;this.name = name;<br />
&nbsp;}</p>
<p>&nbsp;public Department getDepart() {<br />
&nbsp;&nbsp;return depart;<br />
&nbsp;}</p>
<p>&nbsp;public void setDepart(Department depart) {<br />
&nbsp;&nbsp;this.depart = depart;<br />
&nbsp;}</p>
<p>}<br />
</p>
两个子类：<br />
sales.java<br />
<p>package com.zhaosoft.domain;</p>
<p>public class Sales extends Employee{</p>
<p>&nbsp;private int sell;//销售额</p>
<p>&nbsp;public int getSell() {<br />
&nbsp;&nbsp;return sell;<br />
&nbsp;}</p>
<p>&nbsp;public void setSell(int sell) {<br />
&nbsp;&nbsp;this.sell = sell;<br />
&nbsp;}<br />
}<br />
Skiller.java<br />
</p>
<p>package com.zhaosoft.domain;</p>
<p>public class Skiller extends Employee{<br />
&nbsp;private String skill;</p>
<p>&nbsp;public String getSkill() {<br />
&nbsp;&nbsp;return skill;<br />
&nbsp;}</p>
<p>&nbsp;public void setSkill(String skill) {<br />
&nbsp;&nbsp;this.skill = skill;<br />
&nbsp;}<br />
&nbsp;</p>
<p>}</p>
映射文件：<br />
&lt;?xml version="1.0"?&gt;<br />
&lt;!DOCTYPE hibernate-mapping PUBLIC <br />
&nbsp;"-//Hibernate/Hibernate Mapping DTD 3.0//EN"<br />
&nbsp;"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;<br />
&lt;hibernate-mapping package="com.zhaosoft.domain"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 当discriminator-value值为0时，为普通员工 --&gt;<br />
&nbsp;&lt;class name="Employee" discriminator-value="0"&gt;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&lt;id name="id"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 表示主键为自动增长 --&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;generator class="native"/&gt;<br />
&nbsp;&nbsp;&lt;/id&gt;<br />
&nbsp;&nbsp;&lt;!-- 鉴别器，区分是那一种子类 --&gt;<br />
&nbsp;&lt;discriminator column="type" type="int"/&gt;<br />
&nbsp;&lt;property name="name" type="string"/&gt;<br />
&nbsp;&lt;many-to-one name="depart" class="Department" column="depart_id"&gt;&lt;/many-to-one&gt;<br />
&nbsp;&lt;!-- 当为1时，为技术人员 --&gt;<br />
&nbsp;&lt;subclass name="Skiller" discriminator-value="1"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="skill"&gt;&lt;/property&gt;<br />
&nbsp;&lt;/subclass&gt;<br />
&nbsp;&lt;!-- 当为2时为销售人员 --&gt;<br />
&nbsp;&lt;subclass name="Sales" discriminator-value="2"&gt;<br />
&nbsp;&nbsp; &lt;property name="sell"&gt;&lt;/property&gt;<br />
&nbsp;&lt;/subclass&gt;<br />
&nbsp;&lt;/class&gt;<br />
&lt;/hibernate-mapping&gt;<br />
测试：<br />
<p>package com.zhaosoft.test;</p>
<p>import java.util.HashSet;<br />
import java.util.Iterator;<br />
import java.util.Set;</p>
<p>import org.hibernate.Hibernate;<br />
import org.hibernate.Session;<br />
import org.hibernate.Transaction;</p>
<p>import com.zhaosoft.domain.Department;<br />
import com.zhaosoft.domain.Employee;<br />
import com.zhaosoft.domain.Sales;<br />
import com.zhaosoft.domain.Skiller;<br />
import com.zhaosoft.hibernate.HibernateUtil;</p>
<p>public class Many2One {<br />
&nbsp;public static void main(String[] args) {<br />
&nbsp;&nbsp;add();<br />
&nbsp;&nbsp;//queryDepartment(1);<br />
&nbsp;&nbsp;//queryEmployee(1);<br />
&nbsp;}</p>
<p>&nbsp;public static void queryDepartment(int id) {<br />
&nbsp;&nbsp;Session s = HibernateUtil.getSession();<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;Transaction t = s.beginTransaction();<br />
&nbsp;&nbsp;&nbsp;t.begin();<br />
&nbsp;&nbsp;&nbsp;Department de = (Department) s.get(Department.class, 1);<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;t.commit();<br />
&nbsp;&nbsp;&nbsp;Hibernate.initialize(de.getEmps());<br />
&nbsp;&nbsp;&nbsp;System.out.println(de.getName());<br />
&nbsp;&nbsp;&nbsp;Set&lt;Employee&gt; set=de.getEmps();&nbsp;&nbsp; //加载数据<br />
&nbsp;&nbsp;&nbsp;Iterator&lt;Employee&gt; it=set.iterator();<br />
&nbsp;&nbsp;&nbsp;while(it.hasNext()){<br />
&nbsp;&nbsp;&nbsp;Employee employee=&nbsp;it.next();<br />
&nbsp;&nbsp;&nbsp;System.out.println(employee.getName());<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;} catch (Exception e) {</p>
<p>&nbsp;&nbsp;} finally {<br />
&nbsp;&nbsp;&nbsp;if (s != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;s.close();<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}</p>
<p>&nbsp;}</p>
<p>&nbsp;public static Employee queryEmployee(int id) {</p>
<p>&nbsp;&nbsp;Session s = null;<br />
&nbsp;&nbsp;Transaction tx=null;<br />
&nbsp;&nbsp;try {</p>
<p>&nbsp;&nbsp;&nbsp;s=HibernateUtil.getSession();<br />
&nbsp;&nbsp;&nbsp;tx=s.beginTransaction();<br />
&nbsp;&nbsp;&nbsp;Employee emp=(Employee)s.get(Employee.class,id);<br />
&nbsp;&nbsp;&nbsp;//Hibernate.initialize(emp.getDepart());<br />
&nbsp;&nbsp;&nbsp;tx.commit();<br />
&nbsp;&nbsp;&nbsp;return emp;<br />
&nbsp;&nbsp;} finally {<br />
&nbsp;&nbsp;&nbsp;if (s != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;s.close();<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}</p>
<p>&nbsp;}</p>
<p>&nbsp;public static void add() {<br />
&nbsp;&nbsp;Session s = null;<br />
&nbsp;&nbsp;Transaction t=null;<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;s=HibernateUtil.getSession();<br />
&nbsp;&nbsp;&nbsp;t = s.beginTransaction();<br />
&nbsp;&nbsp;&nbsp;t.begin();<br />
&nbsp;&nbsp;&nbsp;Department d = new Department();<br />
&nbsp;&nbsp;&nbsp;d.setName("销售部");</p>
<p>&nbsp;&nbsp;&nbsp;Employee employee1 = new Employee();<br />
&nbsp;&nbsp;&nbsp;employee1.setName("小三");<br />
&nbsp;&nbsp;&nbsp;employee1.setDepart(d);</p>
<p>&nbsp;&nbsp;&nbsp;Skiller employee2 = new Skiller();<br />
&nbsp;&nbsp;&nbsp;employee2.setName("李斯");<br />
&nbsp;&nbsp;&nbsp;employee2.setSkill("skill");<br />
&nbsp;&nbsp;&nbsp;employee2.setDepart(d);<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;Sales employee3 = new Sales();<br />
&nbsp;&nbsp;&nbsp;employee3.setName("王五");<br />
&nbsp;&nbsp;&nbsp;employee3.setSell(100);<br />
&nbsp;&nbsp;&nbsp;employee3.setDepart(d);</p>
<p>&nbsp;&nbsp;&nbsp;Set&lt;Employee&gt; set=new HashSet&lt;Employee&gt;();<br />
&nbsp;&nbsp;&nbsp;set.add(employee1);<br />
&nbsp;&nbsp;&nbsp;set.add(employee2);<br />
&nbsp;&nbsp;&nbsp;set.add(employee3);<br />
&nbsp;&nbsp;&nbsp;d.setEmps(set);<br />
&nbsp;&nbsp;&nbsp;s.save(d);<br />
&nbsp;&nbsp;&nbsp;s.save(employee1);<br />
&nbsp;&nbsp;&nbsp;s.save(employee2);<br />
&nbsp;&nbsp;&nbsp;s.save(employee3);<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;t.commit();<br />
&nbsp;&nbsp;} catch (Exception e) {</p>
<p>&nbsp;&nbsp;} finally {<br />
&nbsp;&nbsp;&nbsp;if (s != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;s.close();<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
}<br />
</p>
<img src ="http://www.blogjava.net/zhaosoft/aggbug/238431.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaosoft/" target="_blank">zhaosoft</a> 2008-11-03 21:13 <a href="http://www.blogjava.net/zhaosoft/archive/2008/11/03/238431.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>