多对多关联映射(双向)

来源:百度文库 编辑:神马文学网 时间:2024/04/29 15:02:45
关联映射方面的最后一篇了,我觉得映射文件的编写是使用hibernate的基础,而关联映射又是基础的基础,所以这方面分的细一些,罗嗦一些,说明白就好,呵呵。     多对多关联(双向),相对单向,在实体上就是一端也保持另一端的对象集合,在映射文件中也配置上。但是要注意两边配置文件中指定的外键一定要对应。1.对象模型:  2.关系模型: 3.实体类:  Player.javapublic class Player {
  private Integer id;
  private String name;
  private Set roles;
  //一系列的setter.getter方法
  @Override
  public String toString() {
    return "Player: " + name;
  }
}  Role.javapublic class Role {
  private Integer id;
  private String name;
  private Set players;
  //一系列的setter.getter方法
  @Override
  public String toString() {
    return "Role: " + name;
  }
4.映射文件:  Player.hbm.xml  <class name="com.sxt.hibernate.many2many.entity.Player" table="sxt_hibernate_player">
    <id name="id" length="4">
      <generator class="native">generator>
    id>
    <property name="name" length="10">property>
    
    <set name="roles" table="sxt_hibernate_player_role" cascade="save-update">
      
      <key column="player_id">key>
      
      <many-to-many class="com.sxt.hibernate.many2many.entity.Role" column="role_id">many-to-many>
    set>
  class>  Role.hbm.xml  <class name="com.sxt.hibernate.many2many.entity.Role" table="sxt_hibernate_role">
    <id name="id" length="4">
      <generator class="native">generator>
    id>
    <property name="name" length="10">property>
    <set name="players" table="sxt_hibernate_player_role" cascade="save-update">
      
      <key column="role_id">key>
      
      <many-to-many class="com.sxt.hibernate.many2many.entity.Player" column="player_id">many-to-many>
    set>
  class> 5.hibernate配置文件:  参照上一篇。 6. 测试方法:  public static void main(String[] args) {
    Session session = HibernateUtils.getSession();
    Transaction t = session.beginTransaction();
    try {
      /**
        * 测试插入数据
        */
        
/*      Player player1=new Player();
      player1.setName("姚明");
        
      Player player2=new Player();
      player2.setName("詹姆斯");
        
      Player player3=new Player();
      player3.setName("科比");
        
      Role role1=new Role();
      role1.setName("中锋");
      Set players1=new HashSet();
      players1.add(player1);
      players1.add(player2);
      role1.setPlayers(players1);
        
      Role role2=new Role();
      role2.setName("后卫");
      Set players2=new HashSet();
      players2.add(player2);
      players2.add(player3);
      role2.setPlayers(players2);
        
      session.save(role1);
      session.save(role2);*/

        
      /**
        * 测试加载数据
        */

      Role role=(Role)session.load(Role.class, 4);
      System.out.println(role);
      for(Iterator players=role.getPlayers().iterator();players.hasNext();){
        System.out.println(players.next());
      }
      t.commit();
    } catch (HibernateException e) {
      e.printStackTrace();
      t.rollback();
    } finally {
      HibernateUtils.closeSession(session);
    }
  }
}