<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中多對多關聯映射(單向),中間需要加入一個表來維護這種多對多關聯關系。
      例子:        
              具體映射方式:
     <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、測試保存數據方法:
     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("總經理");
    12            session.save(role2);
    13            Role role3= new Role();
    14            role3.setName("項目經理");
    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,因此不用調用session.save(role)方法。
    數據庫表數據:
    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 | 總經理   |
    |  3 | 項目經理 |
    +----+----------+
    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
    查詢結果:
    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=總經理
    role.name=項目經理
    role.name=CEO

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



    -------------------------------------------------------------------------------------------------
    PS:本博客文章,如果沒有注明是有“轉”字樣,屬于本人原創。如果需要轉載,務必注明作者文章的詳細出處地址,否則不允許轉載,多謝合作!
    posted on 2008-10-12 21:59 apple0668 閱讀(760) 評論(0)  編輯  收藏 所屬分類: hibernate
    主站蜘蛛池模板: 亚洲日韩中文字幕一区| 亚洲欧洲国产精品你懂的| 亚洲熟女综合一区二区三区| 免费人成在线观看69式小视频| 亚洲欧洲免费视频| 亚洲免费视频播放| 亚洲人成综合在线播放| 巨胸喷奶水视频www网免费| 亚洲а∨天堂久久精品9966| 天天看免费高清影视| 妇女自拍偷自拍亚洲精品| 亚洲国产午夜福利在线播放| 久久久久久久久久免免费精品| 亚洲韩国精品无码一区二区三区| 成全视频高清免费观看电视剧| 久久精品国产亚洲av麻| 99精品一区二区免费视频| 亚洲六月丁香六月婷婷色伊人| 好吊妞在线新免费视频| 青青青视频免费观看| 亚洲av无码专区国产乱码在线观看| 久久精品无码专区免费东京热| 亚洲丰满熟女一区二区v| 黄a大片av永久免费| 国产精品成人69XXX免费视频| 亚洲成人激情在线| 91网站免费观看| 美女裸免费观看网站| 亚洲精品V欧洲精品V日韩精品 | 亚洲一区无码中文字幕乱码| 成年女人视频网站免费m| 一级午夜免费视频| 亚洲三级电影网址| 免费特级黄毛片在线成人观看| 国产99久久久国产精免费| 亚洲日本香蕉视频观看视频| 国产免费小视频在线观看 | 美丽的姑娘免费观看在线播放| 亚洲va久久久久| 国产亚洲人成网站在线观看| 免费h片在线观看网址最新|