多对多关联映射(双向)

关联映射方面的最后一篇了,我觉得映射文件的编写是使用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,一经查实,立即删除!

相关文章

sort-排座椅

题目描述 Description上课的时候总有一些同学和前后左右的人交头接耳&#xff0c;这是令小学班主任十分头疼的一件事情。不过&#xff0c;班主任小雪发现了一些有趣的现象&#xff0c;当同学们的座次确定下来之后&#xff0c;只有有限的D对同学上课时会交头接耳。同学们在教室中…

JSONModel的基本使用

JSONModel 是一个库,它能智能并且快速的创建出数据 model,你可以在你的 iOS 项目或者 OSX 项目上使用它。 使用前准备 添加 JSONModel 到你的工程中 1、需要的环境: ARC,iOS 5.0 / OSX 10.7 引入框架SystemConfiguration.framework2、获取途径&#xff1a; 1&#xff09;、通过…

图像处理 伽玛校正

http://blog.csdn.net/lichengyu/article/details/20840135 本质上是关于灰度的一个幂函数&#xff0c;当系数gamma大于1时&#xff0c;低灰度值的动态范围减小&#xff0c;高灰度值的动态范围增大&#xff0c;整体的灰度值减小&#xff1b;gamma小于1时则相反&#xff1b; 人…

matlab常用工具箱的调用指令

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

tomcat起不来的问题已经解决

tomcat 起不来的问题:\apache-tomcat-6.0.10\bin 中startup.bat 起不来&#xff0c;一闪就没了。说明&#xff1a;环境变量没有配置好。解决办法&#xff1a;配置环境变量&#xff1a;JAVA_HOME C:\Program Files\Java\jdk1.6.0_03就可以解决问题了本文转自 yuwenhu 51CTO博客…

js写法【3】

var m[];m[m.length]xx;//相当于push 对Repeat方法提供了8种写法做比较&#xff0c;这一点还是不错的。转载于:https://www.cnblogs.com/baozhu/p/4862242.html

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

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

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

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

图像边缘梯度的定义

http://blog.csdn.net/u014020344/article/details/50196635

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, /…

内存管理1retain和release

Student.h: #import <Foundation/Foundation.h> interface Student : NSObject property int age; //默认会生成一个_age属性 end Student.m: #import "Student.h" implementation Student //synthesize age_age;//xcode4.5中可以不使用synthesise方法&a…

目标检测的图像特征提取之(一)Hog特征提取

Hog特征实质是&#xff1a;梯度的统计信息,即针对边缘作特征提取 意义&#xff1a;目标的表象和形状 转载于zouxy09大神的文章&#xff0c;加上自己些微的理解和应用&#xff01; http://blog.csdn.net/zouxy09/article/details/7929348/ 上述基本讲清楚了&#xff0c;其实…

redis类型[string 、list 、 set 、sorted set 、hash]

1. Keys redis本质上一个key-value db&#xff0c;所以我们首先来看看他的key. 首先key也是字符串类型&#xff0c;但是key中不能包括边界字符&#xff1b;由于key不是binary safe的字符串&#xff0c;所以像"my key"和"mykey\n"这样包含空格和换行的key是…

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

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

局域网传输速度升级

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

数据结构--栈 codevs 1107 等价表达式

codevs 1107 等价表达式 2005年NOIP全国联赛提高组 时间限制: 1 s空间限制: 128000 KB题目等级 : 钻石 Diamond题目描述 Description明明进了中学之后&#xff0c;学到了代数表达式。有一天&#xff0c;他碰到一个很麻烦的选择题。这个题目的题干中首先给出了一个代数表达式&am…

目标检测的图像特征提取之(二)LBP特征

LBP特征实质是&#xff1a;图像局部特征的提取 意义&#xff1a;纹理的提取 http://blog.csdn.net/zouxy09/article/details/7929531 1&#xff09;首先将检测窗口划分为1616的小区域&#xff08;cell&#xff09;&#xff1b; &#xff08;2&#xff09;对于每个cell中的一个…

VS2010安装帮助文档出现错误

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

matlab smulink笔记03——过零检测

★过零检测 变步长解算方法动态地评估计算下一个采样时刻所使用的步长&#xff0c;当前后两个采 样点的状态值变化大时&#xff0c;则缩小采样步长&#xff0c;当前后两个采样点的值变化小时则增大步 这种做法使得解算器在计算不连续临近区域时使用较小的步长&#xff0c;因为不…