• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Java > 详解hibernate双向多对多关联映射XML与注解版

详解hibernate双向多对多关联映射XML与注解版

作者:lfendo 字体:[增加 减小] 来源:互联网 时间:2017-05-28

lfendo 通过本文主要向大家介绍了hibernate注解详解,hibernate详解,hibernate框架详解,hibernate配置详解,hibernate原理详解等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

双向多对多关联映射原理:

假设,一个员工可能有多个角色,一个角色可能有多个员工,从员工或角色的角度看,这就是多对多的关系,不管从哪一个角度看,都是多对多的联系。多对多关联映射关系一般采用中间表的形式来实现,即新增一种包含关联双方主键的表。实现多对多关联关系,在数据库底层通过添加中间表指定关联关系,而在hibernate框架在双方的实体中添加一个保存对方的集合,在双方的映射文件中使用<set>元素和<many-to-many>元素进行关联关系的配置。

如下图所示:

(1)XML版

Role类:

package Hibernate_demo1.Demo15.Entity; 
 
import java.util.Set; 
 
public class Role { 
   
  private String id; 
  private String rame; 
  private Set<User> users; 
   
   
  public String getId() { 
    return id; 
  } 
  public void setId(String id) { 
    this.id = id; 
  } 
  public String getRame() { 
    return rame; 
  } 
  public void setRame(String rame) { 
    this.rame = rame; 
  } 
  public Set<User> getUsers() { 
    return users; 
  } 
  public void setUsers(Set<User> users) { 
    this.users = users; 
  } 
} 

</div>

User类:

package Hibernate_demo1.Demo15.Entity; 
 
import java.util.Set; 
 
public class User { 
 
  private String id; 
  private String uname; 
  private Set<Role> roles; 
 
   
 
  public String getId() { 
    return id; 
  } 
  public void setId(String id) { 
    this.id = id; 
  } 
  public String getUname() { 
    return uname; 
  } 
  public void setUname(String uname) { 
    this.uname = uname; 
  } 
  public Set<Role> getRoles() { 
    return roles; 
  } 
  public void setRoles(Set<Role> roles) { 
    this.roles = roles; 
  } 
   
   
} 

</div>

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="Hibernate_demo1.Demo15.Entity.Role" table="role">  
    <id name="id" type="java.lang.String">  
      <column name="id"/> 
      <generator class="uuid">  
      </generator>  
    </id>  
    <property name="rame" column="rname"/> 
     
    <set name="users" table="user_role">  
      <key column="roleid"></key>  
      <many-to-many class="Hibernate_demo1.Demo15.Entity.User" column="userid"></many-to-many>  
    </set>  
  </class>  
</hibernate-mapping>  

</div>

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="Hibernate_demo1.Demo15.Entity.User" table="user">  
    <id name="id">  
      <generator class="uuid">  
      </generator>  
    </id>  
     
    <property name="uname" column="uname"/>  
      
     <set name="roles" table="user_role"> 
      <key column="userid"/> 
      <many-to-many class="Hibernate_demo1.Demo15.Entity.Role" column="roleid" />   
    </set> 
  </class>  
</hibernate-mapping>  

</div>

测试类:

package Hibernate_demo1.Demo15; 
 
import java.util.HashSet; 
import java.util.Set; 
 
import org.hibernate.Session; 
 
import Hibernate_demo1.Demo15.Entity.Role; 
import Hibernate_demo1.Demo15.Entity.User; 
import Hibernate_demo1.Demo15.Util.HibernateUtils; 
 
 
 
public class App  
{ 
  public static void main( String[] args ) 
  { 
     
    Session session = null; 
    try{  
        
      session = HibernateUtils.getSession(); 
      session.beginTransaction();  
       
 
      Role r1 = new Role(); 
      r1.setRame("数据录入人员"); 
      session.save(r1); 
       
      Role r2 = new Role(); 
      r2.setRame("商务主管"); 
      session.save(r2); 
       
      Role r3 = new Role(); 
      r3.setRame("商务经理"); 
      session.save(r3); 
       
      Role r4 = new Role(); 
      r4.setRame("项目会计"); 
      session.save(r4); 
       
      User u1 = new User(); 
      u1.setUname("张三"); 
      Set<Role> u1Roles = new HashSet<Role>(); 
      u1Roles.add(r1); 
      u1Roles.add(r2); 
      u1.setRoles(u1Roles); 
      session.save(u1); 
       
      User u2 = new User(); 
      u2.setUname("李四"); 
      Set<Role> u2Roles = new HashSet<Role>(); 
      u2Roles.add(r1); 
      u2Roles.add(r2); 
      u2Roles.add(r3); 
      u2.setRoles(u2Roles); 
      session.save(u2); 
       
      User u3 = new User(); 
      u3.setUname("王五"); 
      Set<Role> u3Roles = new HashSet<Role>(); 
      u3Roles.add(r3); 
      u3Roles.add(r4); 
      u3.setRoles(u3Roles); 
      session.save(u3); 
       
       
      session.getTransaction().commit();  
    }catch(Exception e){  
      e.printStackTrace();  
      session.getTransaction().rollback();  
    }finally{  
      HibernateUtils.closeSession(session);  
    } 
  } 
} 

</div>

执行结果:

Hibernate:  
  insert  
  into 
    role 
    (rname, id)  
  values 
    (?, ?) 
Hibernate:  
  insert  
  into 
    role 
    (rname, id)  
  values 
    (?, ?) 
Hibernate:  
  insert  
  into 
    role 
    (rname, id)  
  values 
    (?, ?) 
Hibernate:  
  insert  
  into 
    role 
    (rname, id)  
  values 
    (?, ?) 
Hibernate:  
  insert  
  into 
    user 
    (uname, id)  
  values 
    (?, ?) 
Hibernate:  
  insert  
  into 
    user 
    (uname, id)  
  values 
    (?, ?) 
Hibernate:  
  insert  
  into 
    user 
    (uname, id)  
  values 
    (?, ?) 
Hibernate:  
  insert  
  into 
    user_role 
    (userid, roleid)  
  values 
    (?, ?) 
Hibernate:  
  insert  
  into 
    user_role 
    (userid, roleid)  
  values 
    (?, ?) 
Hibernate:  
  insert  
  into 
    user_role 
    (userid, roleid)  
  values 
    (?, ?) 
Hibernate:  
  insert  
  into 
    user_role 
    (userid, roleid)  
  values 
    (?, ?) 
Hibernate:  
  insert  
  into 
    user_role 
    (userid, roleid)  
  values 
    (?, ?) 
Hibernate:  
  insert  
  into 
    user_role 
    (userid, roleid)  
  values 
    (?, ?) 
Hibernate:  
  insert  
  into 
    user_role 
    (userid, roleid)  
  values 
    (?, ?) 

</div>

数据库内容为:

user表:


role表:


user_role表:

(2)注解版

Role类:

package Hibernate_demo1.Demo16.Entity; 
 
import java.util.HashSet; 
import java.util.Set; 
 
import javax.persistence.CascadeType; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedVa



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 详解hibernate双向多对多关联映射XML与注解版
  • 详解hibernate双向多对多关联映射XML与注解版

相关文章

  • 2017-05-28给Java菜鸟的一些建议_关于Java知识点归纳(J2EE and Web 部分)
  • 2017-05-28Java微信公众平台开发(12) 微信用户信息的获取
  • 2017-05-28.properties文件读取及占位符${...}替换源码解析
  • 2017-05-28Java中==运算符与equals方法的区别及intern方法详解
  • 2017-05-28通过一个命令轻松切换Java的版本
  • 2017-05-28ByteArrayInputStream简介和使用_动力节点Java学院整理
  • 2017-05-28详解spring boot配置 ssl
  • 2017-05-28Java定时器问题实例解析
  • 2017-05-28spring boot与redis 实现session共享教程
  • 2017-05-28详解eclipse下创建第一个spring boot项目

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • spring boot日志管理配置
    • 详解spring+springmvc+mybatis整合注解
    • Spring Boot的filter(过滤器)简单使用实例详解
    • 详解Spring Boot中Controller用法
    • java Socket实现简单模拟HTTP服务器
    • Spring-Boot框架初步搭建
    • 深入讲解java线程与synchronized关键字
    • SpringBoot连接MYSQL数据库并使用JPA进行操作
    • spring boot(三)之Spring Boot中Redis的使用
    • 简单实现Java验证码功能

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有