Hibernate中的manytomany映射实例一

2024-06-19 11:48

本文主要是介绍Hibernate中的manytomany映射实例一,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转自:http://blog.csdn.net/woshisap/article/details/6448774

2:User的配置文件为:

<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的配置文件为:

<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>

3:测试程序为:

public void testSave1(){   //首先保存Role,再保存User
  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("aaa");
   Set u2Roles = new HashSet();
   u2Roles.add(r2);
   u2Roles.add(r3);
   u2.setRoles(u2Roles);
   
   User u3 = new User();
   u3.setName("kjj");
   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);
  }
 }

 

//首先加载User,根据User来加载Role

 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.name"+role.getName());
   }
   session.getTransaction().commit(); 
  }catch(Exception e){
   e.printStackTrace();
   session.getTransaction().rollback();
  }finally{
   HibernateUtils.closeSession(session);
  }
 }
 

//首先加载Role,再根据Role来加载User
 public void testLoad2(){
  Session session = null;
  try{
   session = HibernateUtils.getSession();
   session.beginTransaction();
   
   Role role = (Role) session.load(Role.class,1);
   System.out.println("role.name"+role.getName());
   for(Iterator iter = role.getUsers().iterator();iter.hasNext(); ){
    User student = (User)iter.next();
    System.out.println("student.name:"+student.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属性值一致


这篇关于Hibernate中的manytomany映射实例一的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1074945

相关文章

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

springboot security验证码的登录实例

《springbootsecurity验证码的登录实例》:本文主要介绍springbootsecurity验证码的登录实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录前言代码示例引入依赖定义验证码生成器定义获取验证码及认证接口测试获取验证码登录总结前言在spring

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

Spring 中使用反射创建 Bean 实例的几种方式

《Spring中使用反射创建Bean实例的几种方式》文章介绍了在Spring框架中如何使用反射来创建Bean实例,包括使用Class.newInstance()、Constructor.newI... 目录1. 使用 Class.newInstance() (仅限无参构造函数):2. 使用 Construc

MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析

《MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析》本文将详细讲解MyBatis-Plus中的lambdaUpdate用法,并提供丰富的案例来帮助读者更好地理解和应... 目录深入探索MyBATis-Plus中Service接口的lambdaUpdate用法及示例案例背景

MyBatis-Plus中静态工具Db的多种用法及实例分析

《MyBatis-Plus中静态工具Db的多种用法及实例分析》本文将详细讲解MyBatis-Plus中静态工具Db的各种用法,并结合具体案例进行演示和说明,具有很好的参考价值,希望对大家有所帮助,如有... 目录MyBATis-Plus中静态工具Db的多种用法及实例案例背景使用静态工具Db进行数据库操作插入

Spring中@Lazy注解的使用技巧与实例解析

《Spring中@Lazy注解的使用技巧与实例解析》@Lazy注解在Spring框架中用于延迟Bean的初始化,优化应用启动性能,它不仅适用于@Bean和@Component,还可以用于注入点,通过将... 目录一、@Lazy注解的作用(一)延迟Bean的初始化(二)与@Autowired结合使用二、实例解

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2