`

[SXT][WY]Hibernate08 多对多关联映射

阅读更多

hibernate多对多关联映射(单向User---->Role)

 

具体映射方式:
 <set name="roles" table="t_user_role">
  <key column="userid"/>
  <many-to-many class="com.bjsxt.hibernate.Role" column="roleid"/>
 </set>

 

User.hbm.xml

 

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
 "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
 <class name="com.bjsxt.hibernate.User" table="t_user">
  <id name="id">
   <generator class="native"/>
  </id>
  <property name="name"/>
  <set name="roles" table="t_user_role">
   <key column="userid"/>
   <many-to-many class="com.bjsxt.hibernate.Role" column="roleid"/>
  </set>
 </class>
</hibernate-mapping>

 

Role.hbm.xml

 

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
 "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
 <class name="com.bjsxt.hibernate.Role" table="t_role">
  <id name="id">
   <generator class="native"/>
  </id>
  <property name="name"/>
 </class>
</hibernate-mapping>

 

 

public void testSave2() {
  Session session = null;
  try {
   session = HibernateUtils.getSession();
   session.beginTransaction();
   
   Role r1 = new Role();
   r1.setName("数据录入人员");
   session.save(r1);
   
   Role r2 = new Role();
   r2.setName("商务主管");
   session.save(r2);
   
   Role r3 = new Role();
   r3.setName("大区经理");
   session.save(r3);
   
   User u1 = new User();
   u1.setName("10");
   Set u1Roles = new HashSet();
   u1Roles.add(r1);
   u1Roles.add(r2);
   u1.setRoles(u1Roles);
   
   User u2 = new User();
   u2.setName("祖儿");
   Set u2Roles = new HashSet();
   u2Roles.add(r2);
   u2Roles.add(r3);
   u2.setRoles(u2Roles);
   
   User u3 = new User();
   u3.setName("杰伦");
   Set u3Roles = new HashSet();
   u3Roles.add(r1);
   u3Roles.add(r2);
   u3Roles.add(r3);
   u3.setRoles(u3Roles);
   
   session.save(u1);
   session.save(u2);
   session.save(u3);
   
   session.getTransaction().commit();
  }catch(Exception e) {
   e.printStackTrace();
   session.getTransaction().rollback();
  }finally {
   HibernateUtils.closeSession(session);
  }
 }  
 
 public void testLoad1() {
  Session session = null;
  try {
   session = HibernateUtils.getSession();
   session.beginTransaction();
   User user = (User)session.load(User.class, 1);
   System.out.println(user.getName());
   for (Iterator iter=user.getRoles().iterator(); iter.hasNext();) {
    Role role = (Role)iter.next();
    System.out.println(role.getName());
   }
   session.getTransaction().commit();
  }catch(Exception e) {
   e.printStackTrace();
   session.getTransaction().rollback();
  }finally {
   HibernateUtils.closeSession(session);
  }
 }  

 

 

hibernate多对多关联映射(双向User<---->Role)

 

映射方法:
  <set name="roles" table="t_user_role">
   <key column="userid"/>
   <many-to-many class="com.bjsxt.hibernate.Role" column="roleid"/>
  </set>
table属性值必须和单向关联中的table属性值一致
<key>中column属性值要与单向关联中的<many-to-many>标签中的column属性值一致
在<many-to-many>中的column属性值要与单向关联中<key>标签的column属性值一致
 

Role.hbm.xml

 

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
 "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
 <class name="com.bjsxt.hibernate.Role" table="t_role">
  <id name="id">
   <generator class="native"/>
  </id>
  <property name="name"/>
  <set name="users" table="t_user_role" order-by="userid">
   <key column="roleid"/>
   <many-to-many class="com.bjsxt.hibernate.User" column="userid"/>
  </set>
 </class>
</hibernate-mapping>

分享到:
评论

相关推荐

    mikrotik SXT 网桥点对点安装

    安装和配置mikrotik SXT网桥进行点对点连接,涉及多个步骤,首先要了解使用的硬件设备,本例中使用的是SXT Lite 2型号的无线网桥设备。接下来是一系列配置操作,包括: 1. 移除默认配置:在开始配置之前,首先需要...

    SXT--RBAC权限控制系统源码

    源码可能包含ORM(对象关系映射)框架的使用,如Hibernate或MyBatis,以及SQL查询语句。 通过分析SXT--RBAC权限控制系统的源码,我们可以深入了解RBAC模型的实现细节,如何有效地进行权限管理,以及如何确保系统的...

    sxt Video File

    在【描述】中提到的“所有下载文档比较全,开发方便用”,意味着该压缩包可能包含了关于sxt文件格式的详细技术文档,对开发者来说是一份宝贵的资源。 sxt文件格式可能采用了先进的视频编码技术,如H.264、HEVC...

    sxt.rar_sxt

    标题 "sxt.rar_sxt" 暗示我们正在处理一个RAR压缩文件,其中包含一个名为"sxt"的项目。这个文件很可能是一个使用Visual C++(VC++)编写的程序,目的是实现无须额外驱动就能访问和操作摄像头的功能。在Windows环境中...

    SXT_ksxt_

    很抱歉,但根据您给出的信息,标题"‘SXT_ksxt_’...请您提供更多的信息,例如:"SXT"具体指的是什么?描述中的内容是否与编程、网络、数据库、操作系统或其他IT领域相关?这样,我就能生成更详细、更贴切的知识点了。

    struts2+spring+hibernate s2sh结合方式框架搭建开发

    Hibernate是Java世界中最流行的ORM(对象关系映射)框架,它允许开发者用Java对象来表示数据库中的表,通过简单的API进行CRUD(创建、读取、更新、删除)操作。Hibernate自动处理SQL的生成和执行,降低了数据库操作...

    SXT shell_SXTshell_

    【SXT Shell:一个自动化安装脚本的探索】 在IT行业中,自动化是提高效率的关键,尤其是在服务器管理和维护中。SXT Shell(SXTshell)是一个专门为实现自动化部署和配置而设计的脚本工具。它旨在简化系统管理员的...

    JSP Tools

    - **hibernate_sxt_03_many2one**: 多对一关系是数据库中常见的关联类型,这个示例可能演示了如何在实体类中定义多对一关系,并进行数据操作。 - **hibernate_sxt_04_one2one1**: 一对一关系在某些场景下也很常见...

    sxt\weblogic\weblogic安装.avi

    sxt\weblogic\weblogic安装.avi sxt\weblogic\weblogic安装.avisxt\weblogic\weblogic安装.avi sxt\weblogic\weblogic安装.avi

    sxt66329PPT模板.pptx

    "sxt66329PPT模板.pptx" 是一款商务用途的PPT模板,适用于各类专业场合。 1. **模板选择与定制**: - 商务模板通常采用简洁、专业且色彩协调的设计,以符合商业环境的正式氛围。"sxt66329" 模板可能包含一系列预设...

    sxt_api_14.jar

    sxt_api_14.jar,便于下载可以使用

    sxt.rar_c# 摄像头实例

    综上所述,"sxt.rar_c# 摄像头实例"应该包含一个简单的C#项目,演示了如何使用C#语言以及上述技术之一或多种,实现对摄像头的基本操作和功能。通过分析和学习这个实例,开发者可以更好地理解和掌握在C#环境中如何...

    sxt.rar_c#扇形图

    7. **计算角度**: 数据值与扇形的角度关联,你需要将每个扇形的数据比例转换为角度。总角度360度代表100%,根据各个扇形的数据占比计算它们的角度。 8. **布局与位置**: 如果有多个扇形,需要考虑它们的布局和相对...

    sxt+doswin1.zip

    综上所述,sxt+doswin1.zip这份压缩包内容,不仅为工程师们提供了实用的工具,更是一次对技术历史的回顾。它提醒我们,在追求技术的最新发展的同时,也需要尊重和传承那些曾经为技术进步做出贡献的经典。正如刘经理...

    sxt.rar_dll_pb9_pb9示例

    在IT行业中,动态链接库(DLL)是一种非常重要的编程元素,它允许开发人员将功能模块化,以便在多个应用程序之间共享。"sxt.rar_dll_pb9_pb9示例" 提供了一个具体的例子,展示了如何在编程中使用DLL,特别是通过PB9...

    sxt.rar_数据结构

    本资源包“sxt.rar_数据结构”中包含了关于链表算法的程序实现,通过C++语言进行编写,旨在帮助我们深入理解和实践链表的操作。 链表不同于数组,它不是一块连续的内存空间,而是由一系列节点组成,每个节点包含...

    sxt.zip_VBa_摄像头

    标题 "sxt.zip_VBa_摄像头" 暗示了这个压缩包可能包含一个使用VBA(Visual Basic for Applications)编程实现的工具或代码,用于访问和操作摄像头。VBA是一种脚本语言,广泛应用于Microsoft Office套件中,如Excel、...

    SXT.rar_DELPHI 摄像头_avicap32

    "SXT.rar_DELPHI 摄像头_avicap32"这个压缩包文件提供了一个使用Delphi编程语言进行摄像头捕捉的解决方案。Delphi是一种强大的对象 Pascal 编程环境,常用于快速开发Windows桌面应用。在这个项目中,开发者可以利用...

    pentair 5800 SXT软水机说明书

    ### Pentair 5800 SXT 软水机相关知识点 #### 一、产品概述 Pentair 5800 SXT软水机是一款高性能的家庭软水设备,适用于去除水中硬度矿物质(如钙、镁等),有效改善水质,减少水垢形成,保护家庭用水设备不受损害...

Global site tag (gtag.js) - Google Analytics