国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

java Hibernate多對多映射詳解及實例代碼

2019-11-26 13:13:13
字體:
來源:轉載
供稿:網友

java Hibernate多對多映射

前言:

一、單向多對多

    單向多對多的例子用人和職位來舉例,一個人可以有多個職位,一個職位會有多個人。單向多對多是指只能在一端來查詢獲取另一端的內容。多對多的關系在生成關系模型時會生成對象之前的關聯表,關聯表中存放著兩個關系表的主鍵,它們的關系如下所示:



代碼部分: 

(1)映射和關系類

因為是單向的關系,所以只需要在一端進行維護,所以我們需要在User.hbm.xml配置文件中添加<many-to-many>標簽,并在標簽中加上對應的列關系,在<set>表中添加table屬性來指明生成新表,User.hbm.xml代碼如下:

<span style="font-family:KaiTi_GB2312;font-size:18px;"><hibernate-mapping>   <class name="com.bjpowernode.hibernate.User" table="t_user">     <id name="id">       <generator class="native"/>     </id>     <property name="name"/>     <set name="roles" table="t_user_role">       <key column="user_id"/>       <many-to-many class="com.bjpowernode.hibernate.Role" column="role_id" />      </set>   </class> </hibernate-mapping></span> 

Role.hbm.xml代碼比較簡單,不需要添加多余的標簽來維護關系:

<hibernate-mapping>   <class name="com.bjpowernode.hibernate.Role" table="t_role">     <id name="id">       <generator class="native"/>     </id>     <property name="name"/>   </class> </hibernate-mapping> 

因為user的映射中有set映射,所以需要在相應的類文件中添加Hashset,User.java代碼如下:

<span style="font-family:KaiTi_GB2312;font-size:18px;">import java.util.Set;  public class User {      private int id;      private String name;    private Set roles;      public int getId() {     return id;   }    public void setId(int id) {     this.id = id;   }    public String getName() {     return name;   }    public void setName(String name) {     this.name = name;   }    public Set getRoles() {     return roles;   }    public void setRoles(Set roles) {     this.roles = roles;   } }</span> 

Role.java代碼如下:

public class Role {    private int id;      private String name;      public int getId() {     return id;   }    public void setId(int id) {     this.id = id;   }    public String getName() {     return name;   }    public void setName(String name) {     this.name = name;   } } 

(2)添加和讀取數據:

進行添加數據時,需要首先吧關系保存到數據庫中,然后創建用戶Hash表,在hash表中添加對應的關系,最后創建用戶,將hash表添加到用戶上。這部分需注意的是寫入的先后順序,否則會出現很多null值,和之前的映射一樣的道理。

public void testSave1() {     Session session = null;     try {       session = HibernateUtils.getSession();       session.beginTransaction();              Role r1 = new Role();       r1.setName("數據錄入人員");       session.save(r1);              Role r2 = new Role();       r2.setName("商務主管");       session.save(r2);              Role r3 = new Role();       r3.setName("商務經理");       session.save(r3);              Role r4 = new Role();       r4.setName("項目會計");       session.save(r4);              User u1 = new User();       u1.setName("張三");       Set u1Roles = new HashSet();       u1Roles.add(r1);       u1Roles.add(r2);       u1.setRoles(u1Roles);       session.save(u1);              User u2 = new User();       u2.setName("李四");       Set u2Roles = new HashSet();       u2Roles.add(r1);       u2Roles.add(r2);       u2Roles.add(r3);       u2.setRoles(u2Roles);       session.save(u2);              User u3 = new User();       u3.setName("王五");       Set u3Roles = new HashSet();       u3Roles.add(r3);       u3Roles.add(r4);       u3.setRoles(u3Roles);       session.save(u3);              session.getTransaction().commit();     }catch(Exception e) {       e.printStackTrace();       session.getTransaction().rollback();     }finally {       HibernateUtils.closeSession(session);     }   } 

讀取時因為是單向關系,只需要通過一來讀取另一端的內容,通過user來讀取role的內容。代碼如下:

public void testLoad1() {     Session session = null;     try {       session = HibernateUtils.getSession();       session.beginTransaction();       User user = (User)session.load(User.class, 2);       System.out.println(user.getName());       for (Iterator iter=user.getRoles().iterator(); iter.hasNext();) {         Role role = (Role)iter.next();         System.out.println(role.getName());       }       session.getTransaction().commit();     }catch(Exception e) {       e.printStackTrace();       session.getTransaction().rollback();     }finally {       HibernateUtils.closeSession(session);     }   }   

二、雙向多對多映射

   和之前介紹的一樣,雙向多對多就是在兩端同時維護關系,從任何一端都能加載到另一端的內容,話不多說直接上代碼:

     因為是雙向的所以需要同時加入雙向的集合映射,在配置文件中添加<set>標簽,添加多對多標簽,Role.hbm.xml代碼如下:

<hibernate-mapping>   <class name="com.bjpowernode.hibernate.Role" table="t_role">     <id name="id">       <generator class="native"/>     </id>     <property name="name"/>     <set name="users" table="t_user_role">       <key column="role_id" not-null="true"/>       <many-to-many class="com.bjpowernode.hibernate.User" column="user_id"/>     </set>   </class> </hibernate-mapping> 

User.hbm.xml代碼如下,和單向映射代碼是一樣的:

<span style="font-family:KaiTi_GB2312;font-size:18px;"><hibernate-mapping>   <class name="com.bjpowernode.hibernate.Role" table="t_role">     <id name="id">       <generator class="native"/>     </id>     <property name="name"/>     <set name="users" table="t_user_role">       <key column="role_id" not-null="true"/>       <many-to-many class="com.bjpowernode.hibernate.User" column="user_id"/>     </set>   </class> </hibernate-mapping> </span> 

Role.java部分,和單向的user.java一樣需要添加集合映射set,代碼如下:

import java.util.Set;  public class Role {    private int id;      private String name;      private Set users;      public int getId() {     return id;   }    public void setId(int id) {     this.id = id;   }    public String getName() {     return name;   }    public void setName(String name) {     this.name = name;   }    public Set getUsers() {     return users;   }    public void setUsers(Set users) {     this.users = users;   } } 

User.hbm.xml和User.java代碼和上文中的代碼相同,就不全部放上來了。

小結:

      單向和多向通過幾篇博客的介紹相信大家已經明白,我們只需要記住單向的雙向的也就會了,挺簡單的。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 公主岭市| 长顺县| 城口县| 新源县| 罗平县| 屏东县| 福清市| 互助| 陈巴尔虎旗| 海城市| 桐柏县| 石阡县| 体育| 图们市| 望都县| 广昌县| 沐川县| 荣成市| 宽城| 天祝| 仁化县| 霍林郭勒市| 郁南县| 崇仁县| 寻甸| 桑日县| 浦东新区| 黄冈市| 平谷区| 阳西县| 沁水县| 甘肃省| 鄂托克旗| 门源| 四平市| 博野县| 毕节市| 邯郸县| 柳林县| 宽甸| 兴国县|