关联映射方面的最后一篇了,我觉得映射文件的编写是使用hibernate的基础,而关联映射又是基础的基础,所以这方面分的细一些,罗嗦一些,说明白就好,呵呵。
多对多关联(双向),相对单向,在实体上就是一端也保持另一端的对象集合,在映射文件中也配置上。但是要注意两边配置文件中指定的外键一定要对应。
1.对象模型:
2.关系模型:
3.实体类:
Player.java
public class Player { 
  private Integer id; 
  private String name; 
  private Set<Role> roles; 
  //一系列的setter.getter方法 
  @Override 
  public String toString() { 
    return "Player: " + name; 
  } 
}
  Role.java
public class Role { 
  private Integer id; 
  private String name; 
  private Set<Player> 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> 
    <!--table="sxt_hibernate_user_role"含义,用来指定中间表    --> 
    <set name="roles" table="sxt_hibernate_player_role" cascade="save-update"> 
      <!--<key column="user_id">含义,指定中间表中用来指向本表的外键    --> 
      <key column="player_id"></key> 
      <!-- column含义,用来指定中间表中用来指向另一端表的外键 --> 
      <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<Player> players1=new HashSet<Player>(); 
      players1.add(player1); 
      players1.add(player2); 
      role1.setPlayers(players1); 
        
      Role role2=new Role(); 
      role2.setName("后卫"); 
      Set<Player> players2=new HashSet<Player>(); 
      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<Player> players=role.getPlayers().iterator();players.hasNext();){ 
        System.out.println(players.next()); 
      } 
      t.commit(); 
    } catch (HibernateException e) { 
      e.printStackTrace(); 
      t.rollback(); 
    } finally { 
      HibernateUtils.closeSession(session); 
    } 
  } 
     本文转自NightWolves 51CTO博客,原文链接:http://blog.51cto.com/yangfei520/276187,如需转载请自行联系原作者

多对多关联映射(双向)相关推荐

  1. 步步为营Hibernate全攻略(三)剪不断理还乱之:多对多关联映射

    hibernate多对多关联映射同样可以分为单向的关联映射和双向的关联映射,与一对多关联映射相比,双方之间的关系将不再由其中多的一方维护而是变成了由第三张表来维护.第三张表的出现不仅减少了两张表中的数 ...

  2. NHibernate从入门到精通系列(7)——多对一关联映射

    内容摘要 多对一关联映射概括 多对一关联映射插入和查询 多对一关联映配置介绍 一.多对一关联映射概括 关联关系是实体类与实体类之间的结构关系,分别为"多对一"."一对一& ...

  3. hibernate之多对多关联映射

    hibernate之多对多关联映射 转载于:https://www.cnblogs.com/liuyang-1037/archive/2009/06/06/1497589.html

  4. mybatis手写多对多关联映射

    mybatis手写多对多关联映射 1.一对一关联查询 1.1resultType实现 1.2resultMap实现 2.一对多关联查询 3.多对多关联查询 4.resultType与resultMap ...

  5. 【Hibernate框架】关联映射(多对多关联映射)

    按着我们的总结行进计划,接下来,就是有关于多对多映射的总结了. 我们来举个例子啊,很长时间以来,房价暴涨不落,但是还有很多人拥有很多套房产,假如说,一个富豪拥有九套房产,家里人么准去住哪一套,我们就以 ...

  6. hibernate_day03_多对多关联映射

    hibernate_day03_MySQL数据库-表与表之间的多对多关系-实例 hibernate_day03_一对多相关操作 Hibernate多对多关系的配置 : (1)创建表 : 用户表 [cr ...

  7. JAVA两个表相关联_关于Java:如何将多对多关联映射到映射到两个不同表的类?...

    我有一个凭证-POJO映射到两个表. 第一个映射分配一个实体名称" voucherA",并将POJO映射到TableA. 第二个映射使用" voucherB"作 ...

  8. MyBatis 多对多关联映射

    示例[通过班级查询老师信息] 创建t_classes 创建t_classessTeacher 创建t_teacher 创建Classes package com.po; import java.uti ...

  9. 多对多关联映射(双向关联)见项目:me_many_to_many

    1.模型 一个用户拥有多个角色,一个角色拥有多个用户. 2.实体类(省略set,get方法) public class User {  private int id;  private String ...

最新文章

  1. 为什么 Linux 系统调用会消耗较多资源
  2. 《机器人与数字人:基于MATLAB的建模与控制》——2.3节指数映射和k过程
  3. PYTHON调用JENKINS的API来进行CI
  4. MySQL数据导入oracle
  5. Python小游戏(并夕夕版飞机大战)
  6. 计算机科学与技术初级知识,计算机科学与技术专业课程有哪些
  7. python search函数 中文_python使用正则表达式的search()函数实现指定位置搜索功能...
  8. php data类型转换,【原】超简单类型转换(DataTable
  9. Linux系统编程--3(exec 函数族,僵尸进程和孤儿进程,wait和wait_pid回收子进程)
  10. (72)Verilog HDL系统函数和任务:$display
  11. mysql 5.6.14源码安装_CentOS 6.4下编译安装MySQL 5.6.14详细步骤
  12. 二叉树的基本操作(C)
  13. C语言编程学习的经验
  14. Android 原生GPS定位 判断室内室外
  15. HTML学习(三):排版
  16. element ui 手动清除表单效验提示语
  17. FPGA 串口通信——通用模块
  18. Fetcher failure for URL: ‘gitsm://github.com/Xilinx/qemu.git;protocol=https petalinux build 问题
  19. 抖音常见的几种违规行为,抖音新手应该注意防范:国仁楠哥
  20. 0PP0升级android版本,oppo哪些手机可以升级安卓11 oppo手机升级安卓11方法

热门文章

  1. 手机网页转换为html文件,怎么在手机上打开HTML文件
  2. 求n的阶乘的算法框图_单片机常用的14个C语言算法
  3. Unity Android解决信息流广告关闭报错
  4. size_t为什么重要
  5. __METHOD__
  6. windows任务计划程序 坑
  7. iOS8 【xcode6中添加pch全局引用文件】
  8. unix网络编程 的环境配置
  9. 浅谈五大Python Web框架
  10. [BZOJ3994][SDOI2015]约数个数和