<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-61  評論-159  文章-0  trackbacks-0
               hibernate中多對多關(guān)聯(lián)映射(單向),中間需要加入一個表來維護這種多對多關(guān)聯(lián)關(guān)系。
      例子:        
              具體映射方式:
     <set name="roles" table="t_user_role">
      <key column="userid"/>
      <many-to-many class="com.bjsxt.hibernate.Role" column="roleid"/>
     </set>

             
    1、User的POJO類
     1import java.util.Set;
     2
     3public class User {
     4    
     5    private int id;
     6    
     7    private String name;
     8    
     9    private Set roles;
    10//省略setter、getter方法
    11}
    2、Role的POJO類
    1public class Role {
    2    
    3    private int id;
    4    
    5    private String name;
    6//省略setter、getter方法
    7}

    3、User的映射文件User.hbm.xml
     1<?xml version="1.0"?>
     2<!DOCTYPE hibernate-mapping PUBLIC 
     3    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
     4    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
     5<hibernate-mapping>
     6    <class name="org.apple.hibernate.User" table="t_user">
     7        <id name="id">
     8            <generator class="native"/>
     9        </id>
    10        <property name="name"/>
    11        <set name="roles" table="t_user_role">
    12            <key column="userid"/>
    13            <many-to-many column="roleid" class="org.apple.hibernate.Role"/>
    14        </set>
    15    </class>
    16</hibernate-mapping>

    4、Role的映射文件Role.hbm.xml
     1<?xml version="1.0"?>
     2<!DOCTYPE hibernate-mapping PUBLIC 
     3    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
     4    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
     5<hibernate-mapping>
     6    <class name="org.apple.hibernate.Role" table="t_role" >
     7        <id name="id">
     8            <generator class="native"/>
     9        </id>
    10        <property name="name"/>
    11    </class>
    12</hibernate-mapping>
    5、測試保存數(shù)據(jù)方法:
     1public void testSave()
     2    {
     3        Session session = null;
     4        try {
     5            session = HibernateUtil.getSession();
     6            session.beginTransaction();
     7            Role role1 = new Role();
     8            role1.setName("CEO");
     9            session.save(role1);
    10            Role role2 = new Role();
    11            role2.setName("總經(jīng)理");
    12            session.save(role2);
    13            Role role3= new Role();
    14            role3.setName("項目經(jīng)理");
    15            session.save(role3);
    16            User user1 = new User();
    17            user1.setName("張三");
    18            Set user1role = new HashSet();
    19            user1role.add(role1);
    20            user1role.add(role2);
    21            user1role.add(role3);
    22            user1.setRoles(user1role);
    23            
    24            User user2 = new User();
    25            user2.setName("李四");
    26            Set user2role = new HashSet();
    27            user2role.add(role1);
    28            user2role.add(role2);
    29            user2.setRoles(user2role);
    30            session.save(user1);
    31            session.save(user2);
    32            session.beginTransaction().commit();
    33            
    34            
    35        }
     catch (Exception e) {
    36            e.printStackTrace();
    37            session.beginTransaction().rollback();
    38            
    39        }
    finally{
    40            session.close();
    41        }

    42    }
    PS:由于t_user_role中的字段都是參照t_user中的id和t_role的id,因此不用調(diào)用session.save(role)方法。
    數(shù)據(jù)庫表數(shù)據(jù):
    mysql> select *from t_user_role;
    +--------+--------+
    | userid | roleid |
    +--------+--------+
    |      1 |      1 |
    |      2 |      1 |
    |      1 |      2 |
    |      2 |      2 |
    |      1 |      3 |


    mysql> select *from t_user;
    +----+------+
    | id | name |
    +----+------+
    |  1 | 張三 |
    |  2 | 李四 |
    +----+------+


    mysql> select *from t_role;
    +----+----------+
    | id | name     |
    +----+----------+
    |  1 | CEO      |
    |  2 | 總經(jīng)理   |
    |  3 | 項目經(jīng)理 |
    +----+----------+
    6、測試查詢方法:
     1public void testLoad1()
     2    {
     3        Session session = null;
     4        try {
     5            session = HibernateUtil.getSession();
     6            session.beginTransaction();
     7            
     8            session.beginTransaction().commit();
     9            User user = (User)session.load(User.class1);
    10            System.out.println("user.name="+user.getName());
    11            for(Iterator it = user.getRoles().iterator();it.hasNext();)
    12            {
    13                Role role = (Role)it.next();
    14                System.out.println("role.name="+role.getName());
    15            }

    16            
    17            
    18        }
     catch (Exception e) {
    19            e.printStackTrace();
    20            session.beginTransaction().rollback();
    21            
    22        }
    finally{
    23            session.close();
    24        }

    25    }

    26
    查詢結(jié)果:
    Hibernate: select user0_.id as id0_0_, user0_.name as name0_0_ from t_user user0_ where user0_.id=?
    user.name=張三
    Hibernate: select roles0_.userid as userid1_, roles0_.roleid as roleid1_, role1_.id as id2_0_, role1_.name as name2_0_ from t_user_role roles0_ left outer join t_role role1_ on roles0_.roleid=role1_.id where roles0_.userid=?
    role.name=總經(jīng)理
    role.name=項目經(jīng)理
    role.name=CEO

    PS:由于一個人可能有多個角色,要把一個人對應(yīng)的角色迭代出來。



    -------------------------------------------------------------------------------------------------
    PS:本博客文章,如果沒有注明是有“轉(zhuǎn)”字樣,屬于本人原創(chuàng)。如果需要轉(zhuǎn)載,務(wù)必注明作者文章的詳細出處地址,否則不允許轉(zhuǎn)載,多謝合作!
    posted on 2008-10-12 21:59 apple0668 閱讀(760) 評論(0)  編輯  收藏 所屬分類: hibernate
    主站蜘蛛池模板: 国产亚洲视频在线观看| 亚洲精品亚洲人成在线播放| 久久久久国色AV免费观看| 亚洲av无码av制服另类专区| 亚洲国产精品无码久久98| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 黄色免费在线网站| 久久久久亚洲AV无码专区首| 91福利视频免费观看| 亚洲人成电影网站国产精品| 亚洲AV无码一区二区大桥未久| 永久免费在线观看视频| 在线观看亚洲免费| 久久精品国产亚洲AV大全| 一个人免费日韩不卡视频| 亚洲免费综合色在线视频| 亚洲精品无码永久在线观看你懂的 | 免费观看又污又黄在线观看| 国产一级高清视频免费看| 无码人妻一区二区三区免费n鬼沢| 亚洲精品无码mⅴ在线观看| 久久精品国产亚洲av四虎| 免费无码又爽又刺激高潮的视频| 亚洲国产日韩综合久久精品| 亚洲人成人无码网www电影首页| 永久免费视频v片www| 亚洲一区二区三区在线观看精品中文 | 久久国产乱子伦精品免费强| 亚洲国产精品99久久久久久| 久久精品夜色国产亚洲av| 免费一级特黄特色大片在线| 免费能直接在线观看黄的视频| 一区二区视频在线免费观看| 精品国产成人亚洲午夜福利| 亚洲色婷婷一区二区三区| 全部免费国产潢色一级| 成人毛片免费观看视频在线 | 成年网站免费入口在线观看| 国产色在线|亚洲| 亚洲精品无码不卡| 亚洲色大成网站WWW久久九九|