久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

hibernate中一對多關(guān)系的映射

 jp乞巧樓 2015-11-02

  昨天初次接觸hibernate,僅僅弄懂了一對一關(guān)系的映射。今天學(xué)習(xí)了一天又有了新的收獲,,弄懂了一對多之間關(guān)系的映射,。

一、一對多的關(guān)系映射

  建立一對多關(guān)系關(guān)系的表的原則是將一的一方的主鍵加入到多的一方的表作為外鍵,。這里以員工和部門為例子來演示,。以前不用hibernate時建立pojo類要在員工類Emp中加入一個屬性,即部門編號deptid.使用hibernate則不同了,,需要在“一”的一方類中加入一個set集合,,里面存放“多”的一方的對象。而在“多”的一方的類中需要加入一個“一”方的對象,。也就是說在Dept類中需要加入一個set集合,,存放Emp對象,因為一個部門里面對應(yīng)多個員工,,所以用一個集合來表示,。而每一個員工只能屬于一個部門,所以員工類Emp里面需要加入一個Depe類對象,,表示所屬部門,。部門類和員工類的代碼如下 

復(fù)制代碼
 1 public class Dept implements Serializable {
 2     private int deptId;
 3     private String deptName;
 4     private Set<Emp> emps = new HashSet<Emp>();
 5     public int getDeptId() {
 6         return deptId;
 7     }
 8     public void setDeptId(int deptId) {
 9         this.deptId = deptId;
10     }
11     public String getDeptName() {
12         return deptName;
13     }
14     public void setDeptName(String deptName) {
15         this.deptName = deptName;
16     }
17     public Set<Emp> getEmps() {
18         return emps;
19     }
20     public void setEmps(Set<Emp> emps) {
21         this.emps = emps;
22     }
23 }
復(fù)制代碼
復(fù)制代碼
 1 public class Emp implements Serializable{
 2     private int empNo;
 3     private String empName;
 4     private Date empBirthday;
 5     private Dept dept;
 6     public int getEmpNo() {
 7         return empNo;
 8     }
 9     public void setEmpNo(int empNo) {
10         this.empNo = empNo;
11     }
12     public String getEmpName() {
13         return empName;
14     }
15     public void setEmpName(String empName) {
16         this.empName = empName;
17     }
18     public Date getEmpBirthday() {
19         return empBirthday;
20     }
21     public void setEmpBirthday(Date empBirthday) {
22         this.empBirthday = empBirthday;
23     }
24     public Dept getDept() {
25         return dept;
26     }
27     public void setDept(Dept dept) {
28         this.dept = dept;
29     }
30     
31 }
復(fù)制代碼

  寫完pojo類后就要配置這兩個類和表之間的映射關(guān)系了,代碼如下:

1.Dept.hbm.xml

復(fù)制代碼
 1 <hibernate-mapping>
 2     <!-- 表和類之間的映射 -->
 3     <class name="com.pojo.Dept" table="dept">
 4         <!-- 主鍵映射 -->
 5         <id name="deptId" column="deptId">
 6             <generator class="native"></generator>
 7         </id>
 8         <!-- 屬性映射 -->
 9         <property name="deptName" column="deptName" length="50"></property>
10         <!-- 表之間關(guān)系映射 -->
11         <set name="emps" cascade="save-update,delete">
12             <key column="deptId"></key>
13             <one-to-many class="com.pojo.Emp"/>
14         </set>
15     </class>
16 </hibernate-mapping>
復(fù)制代碼

這里面配置了一個set,里面的name="emps"表示在Dept類里的屬性emps,它是一個集合,,存放Emp對象的,。cascade="save-update,delete"指明可以級聯(lián)刪除,級聯(lián)插入數(shù)據(jù),。cascade有四個值:all,、save-update、delete,、none,默認(rèn)就是none,表示不能級聯(lián)操作,。<one-to-many class="com.pojo.Emp"/>表示Dept與Emp是一對多的關(guān)系,他們是以deptId建立關(guān)系的,,即deptId是Emp的外鍵,。

2.Emp.hbm.xml

復(fù)制代碼
 1 <hibernate-mapping>
 2     <!-- 表和類之間的映射 -->
 3     <class name="com.pojo.Emp" table="emp">
 4         <!-- 主鍵映射 -->
 5         <id name="empNo" column="empNo">
 6             <generator class="native"></generator>
 7         </id>
 8         <!-- 屬性映射 -->
 9         <property name="empName" column="empName" length="50"></property>
10         <property name="empBirthday" column="empBirthday"></property>
11         <!-- 表之間關(guān)系映射 -->
12         <many-to-one name="dept" column="deptId"></many-to-one>
13     </class>
14 </hibernate-mapping>
復(fù)制代碼

  這里加了<many-to-one></many-to-one>表示Emp與Dept是多對一的關(guān)系,name="dept"表示在Emp類里面有一個屬性是Dept對對象dept,column="deptId"表示 它們之間是用deptId建立聯(lián)系的,。

下面是級聯(lián)插入數(shù)據(jù)的代碼:

復(fù)制代碼
 1 package com.test;
 2 
 3 import java.util.Date;
 4 
 5 import org.hibernate.Session;
 6 import org.hibernate.Transaction;
 7 
 8 import com.pojo.Dept;
 9 import com.pojo.Emp;
10 import com.util.DBUtil;
11 
12 public class 級聯(lián)插入數(shù)據(jù) {
13 
14     /**
15      * @param args
16      */
17     public static void main(String[] args) {
18         //獲得session
19         Session session = DBUtil.getSession();
20         //新建一個dept
21         Dept dept = new Dept();
22         dept.setDeptName("吃飯部");
23         
24         //新建emp
25         Emp e1 = new Emp();
26         e1.setEmpName("李白");
27         e1.setEmpBirthday(new Date());
28         
29         Emp e2 = new Emp();
30         e2.setEmpName("王維");
31         e2.setEmpBirthday(new Date());
32         
33         dept.getEmps().add(e1);
34         dept.getEmps().add(e2);
35         
36         Transaction tr = session.beginTransaction();
37         try {
38             session.save(dept);
39             tr.commit();
40         } catch (Exception e) {
41             tr.rollback();
42         }finally{
43             session.close();
44         }
45     }
46 
47 }
復(fù)制代碼

先建立一個dept對象,,然后建立兩個emp對象,然后把這兩個emp對象加入到dept對象的集合里面,,然后保存dept,。級聯(lián)插入只要操作父表,就可以操作子表,。前提是要在前面那個cascade="save-update"必須寫,。

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多