多对多关联映射(双向)

关联映射方面的最后一篇了,我觉得映射文件的编写是使用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,如需转载请自行联系原作者



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/256622.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab常用工具箱的调用指令

转自:http://blog.sina.com.cn/s/blog_86186c970102va9g.html Matlab常用工具箱的调用命令 1. 优化工具箱​​ 用途:优化问题 调用命令:在Command Window输入“optimtool”​,其窗口如下 图1 Optimization Tool 2. 神经网络工具箱​ 用途:数据拟合、模式识别和分类…

Eclipse设置控制台日志输出位置

1、选择服务器配置 2、设置输出文件路径 转载于:https://www.cnblogs.com/Neil223/p/5759693.html

现代制造工程——第七章(轧制和锻造)

考点基于书本以及PPT的题目 一、轧制 二、锻造

Jquery_JQuery之DataTables强大的表格解决方案

1、DataTables的默认配置 $(document).ready(function() { $(‘#example’).dataTable(); } ); 示例&#xff1a;http://www.guoxk.com/html/DataTables/Zero-configuration.html 2、DataTables的一些基础属性配置 “bPaginate”: true, //翻页功能 “bLengthChange”: true, /…

matlab simulink笔记02——延迟模块delay与单位延迟模块unit delay

延迟模块 单位延迟模块 延迟模块具有复位功能,当满足复位条件时会进行复位操作,即输出的值会恢复到初始值,而单位延迟模块没有复位功能; 延迟模块的步长是可以设置的,而单位延迟模块的步长固定为1,不可以改变

局域网传输速度升级

现在很多单位都建成了企业内部局域网&#xff0c;一般的企业网络大多是使用双 绞线连接网卡的方式来进行通信的。其中双绞线通常采用的都是5类线&#xff0c;传输速率为100MB。而网卡则有一定的区别&#xff0c;很多网卡都是采取 10Mbps/100Mbmps自适应的网卡&#xff0c;即传输…

VS2010安装帮助文档出现错误

安装VS2010后的帮助文档安装出现错误:未能在指定文件夹中创建本地存储区 安装完VS2010后&#xff0c;出现错误&#xff0c;取消后 再安装MSDN 打开“Help Library 管理器 - Microsoft Help 查看器 1.0” 提示“请为本地内容选择位置” 默认的位置是在“C:\Documents and Settin…

angularjs学习曲线

angularjs学习曲线 刚开始学Augular觉得开发应用需要有相当的编程基础. 不得不说这确实是一款了不起的开发框架&#xff0c;它要求开发人员设计低耦合和可维护的应用. 使用AngularJS 的复杂度就像使用PHP&#xff0c;Ruby on Rails等等, 都需要处理依赖注入&#xff0c;路由&am…

matlab simulink笔记04——switch模块

Switch 模块 Switch模块是-.个选择开关模块,可根据判断条件选择多个输入端口中的某个进行输出。图所示为CommonlyUsedBlocks中具有3个输入端口.1个输出端口的Switch模块图标。模块的3个端口中,第1个和第3个端口为输出端口提供输出值,输出端口输出第1个输人口还是第3个输人口的值…

[Ajax]ajax学习与理解

1.新建demo.aspx页面。2.首先在该页面的后台文件demos.aspx.cs中添加引用。 using System.Web.Services;3.无参数的方法调用. 大家注意了&#xff0c;这个版本不能低于.net framework 2.0。2.0已下不支持的。后台代码&#xff1a; [WebMethod] public static string SayHel…

Tesseract入门-VS2015下调用Tesseract4.0 +win7 64位系统

本文是基于最近的OCR识别项目学习ocr开源库-tesseract的简单调用&#xff0c;不涉及其余视觉知识。 参考文献&#xff1a;http://blog.csdn.net/u012566751/article/details/54136836 参考库&#xff1a;http://download.csdn.net/download/u010554381/10044876 1.预备工作 …

matlab simulinK笔记06——代数环

★代数环 代数环,就是由于模型的输出反馈到模块或子系统的某个输入端&#xff0c;如果这个输入 是直接馈入的&#xff0c;那么二者在同一个采样点内需得到求解&#xff0c;但又互相依赖,哪一方都不 能完成求解过程&#xff0c;使得解算器无法解算导致错误产生&#xff0c;这样的…

基于python3的Opencv(一)-打开摄像头显示图像

基于Python3的Opencv学习&#xff1a; import cv2 as cv def video_demo(): #0是代表摄像头编号&#xff0c;只有一个的话默认为0capturecv.VideoCapture(0) while(True):ref,framecapture.read()cv.imshow("1",frame) #等待30ms显示图像&#xff0c;若过程中按“Esc…

.Net中的AOP系列之《方法执行前后——边界切面》

返回《.Net中的AOP》系列学习总目录 本篇目录 边界切面 PostSharp方法边界方法边界 VS 方法拦截ASP.NET HttpModule边界真实案例——检查是否为移动端用户真实案例——缓存小结本系列的源码本人已托管于Coding上&#xff1a;点击查看。 本系列的实验环境&#xff1a;VS 2013 Up…

Opencv SolvePnP调用实战

1.环境说明与应用说明 VS2015opencv3.4&#xff0c;实际应用在MFC环境中&#xff01;主要是用来做定位&#xff0c;利用平面靶标给机器人的工具快换提供定位信息 2.实际调用 CV_EXPORTS_W bool solvePnP( InputArray objectPoints, InputArray imagePoints, …

matlab simulink笔记05 —— 积分模块

1.连续积分模块&#xff1a;integrator 例子见&#xff1a;matlab simulink笔记06 —— 利用simulink求解微分方程/simulink框图与控制系统框图的区别

squid在企业网中的应用

一&#xff1a;squid简介&#xff1a; Squid是一种在Linux系统下使用的优秀的代理服务器软件。Squid是一个缓存internet数据的一个软件&#xff0c;它接收用户的下载申请&#xff0c;并自动处理所下载的数据。也就是说&#xff0c;当一个用户想要下载一个主页时&#xff0c;它向…

win10+tensorflow faster-RCNN 训练自己的数据集

首先&#xff0c;感谢博客上各路大佬的无私奉献&#xff01;但是也不得不吐槽下&#xff0c;大佬些写博客的时候能尽量写的对小白友好一点吗&#xff1f;期间遇到各种坑&#xff0c;说多了都是泪啊&#xff01;话不多说&#xff0c;上正题&#xff01; 环境&#xff1a;win10a…

matlab simulnk笔记07——模块(接地模块group、终止模块terminal、信号合并mux与分解模块demux)

1.接地模块group 2.终止模块terminal 3.信号合并mux 注意:合并仅仅指的是物理上的合并,数学上真正意义上的合并,只是将多个信号放在同一个管道上统一传输给显示终端,但是每个信号之间互不影响,是相