<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
    主站蜘蛛池模板: 久久久久久影院久久久久免费精品国产小说| 九九久久精品国产免费看小说| 日韩免费高清一级毛片在线| 亚洲欧美中文日韩视频| 亚洲AV成人潮喷综合网| eeuss免费天堂影院| 亚洲欧洲精品久久| 免费看国产曰批40分钟| 十八禁在线观看视频播放免费| 亚洲国产综合专区电影在线| 成人免费激情视频| 一级毛片人与动免费观看| 亚洲AV无码久久精品狠狠爱浪潮| 18禁男女爽爽爽午夜网站免费| 丁香婷婷亚洲六月综合色| 亚洲?V无码成人精品区日韩| 777爽死你无码免费看一二区| 在线a亚洲老鸭窝天堂av高清| 亚洲男人在线无码视频| 精品无码国产污污污免费网站| 亚洲AV无码片一区二区三区 | 最近中文字幕mv手机免费高清| 亚洲黄片手机免费观看| 亚洲综合中文字幕无线码| 亚洲日韩一页精品发布| 美女被免费视频网站a国产| 四虎影视成人永久免费观看视频 | 亚洲精品无码久久千人斩| 国产美女无遮挡免费视频网站 | 污视频网站在线观看免费| 亚洲区视频在线观看| 国产亚洲一区二区在线观看| 日本二区免费一片黄2019| 四虎永久在线观看免费网站网址 | 亚洲AV网一区二区三区| 亚洲va久久久噜噜噜久久| 在线免费观看一级毛片| 免费h片在线观看网址最新| 最近高清国语中文在线观看免费| a毛片免费在线观看| 羞羞网站免费观看|