1.比如在权限管理中,角色和权限之间的关系就是多对多的关系,表结构为:

2.类结构

Role.java

public class Role implements Serializable{
private int id;
private String name;
private Set<Permission> permissions=new HashSet<Permission>();
public Role() {
}
public Role(String name) {
super();
this.name = name;
} public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<Permission> getPermissions() {
return permissions;
}
public void setPermissions(Set<Permission> permissions) {
this.permissions = permissions;
}
}

Permisssion.java

public class Permission implements Serializable{
private int id;
private String name;
private Set<Role> roles;
public Permission() {
// TODO Auto-generated constructor stub
} public Permission(String name) {
super();
this.name = name;
} public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} public Set<Role> getRoles() {
return roles;
} public void setRoles(Set<Role> roles) {
this.roles = roles;
}
}

3.映射文件信息

Role.hbm.xml

<hibernate-mapping package="cn.sxt.pojo">
<class name="Role" table="t_role">
<id name="id">
<generator class="native">
</generator>
</id>
<property name="name"/>
<set name="permissions" table="t_role_permission">
<!-- 当前类在连接表中的外键 -->
<key column="rid"></key>
<many-to-many column="pid" class="Permission"></many-to-many>
</set>
</class>
</hibernate-mapping>

Permission.hbm.xml

<hibernate-mapping package="cn.sxt.pojo">
<class name="Permission" table="t_permission">
<id name="id">
<generator class="native">
</generator>
</id>
<property name="name"/>
<set name="roles" table="t_role_permission" inverse="true">
<!-- 当前类在连接表中的外键 -->
<key column="pid"></key>
<many-to-many column="rid" class="Role"></many-to-many>
</set>
</class>
</hibernate-mapping>

4.测试

public class HibernateTest {
/**
* 生成数据库表的工具方法
* */
@Test
public void testCreateDB(){
Configuration cfg = new Configuration().configure();
SchemaExport se = new SchemaExport(cfg);
//第一个参数 是否打印sql脚本
//第二个参数 是否将脚本导出到数据库中执行
se.create(true, true);
}
/**
* 初始化表数据
*/
@Test
public void testInit(){
Session session = null;
Transaction tx = null;
try {
session = HibernateUtil.getSession();
tx = session.beginTransaction();
Permission p1 = new Permission("增加用户");
Permission p2 = new Permission("删除用户");
Permission p3 = new Permission("查询用户");
Permission p4 = new Permission("修改用户"); Role r1 = new Role("管理员");
r1.getPermissions().add(p1);
r1.getPermissions().add(p2);
r1.getPermissions().add(p3);
r1.getPermissions().add(p4);
Role r2 = new Role("vip");
r2.getPermissions().add(p3);
r2.getPermissions().add(p4); session.save(p1);
session.save(p2);
session.save(p3);
session.save(p4);
session.save(r1);
session.save(r2);
tx.commit(); } catch (Exception e) {
if(tx!=null)
tx.rollback();
}finally {
HibernateUtil.close();
}
}
/**
*/
@Test
public void testGetData(){
Session session = HibernateUtil.getSession();
Role role = (Role)session.get(Role.class, 1);
System.out.println(role.getId()+"---"+role.getName());
System.out.println("-------------");
for(Permission p:role.getPermissions()){
System.out.println(p.getId()+"---"+p.getName());
}
System.out.println("==========================");
Permission p = (Permission)session.get(Permission.class, 3);
System.out.println(p.getId()+"----"+p.getName());
for(Role r:p.getRoles()){
System.out.println(r.getId()+"---"+r.getName());
}
HibernateUtil.close();
}
}

java之hibernate之多对多双向关联映射的更多相关文章

  1. Hibernate从入门到精通(十一)多对多双向关联映射

    上次我们在中Hibernate从入门到精通(十)多对多单向关联映射讲解了一下多对多单向关联映射,这次我们讲解一下七种映射中的最后一种多对多双向关联映射. 多对多双向关联映射 按照我们之前的惯例,先看一 ...

  2. Hibernate(十一)多对多双向关联映射

    上次我们在中Hibernate从入门到精通(十)多对多单向关联映射讲解了一下多对多单向关联映射,这次我 们讲解一下七种映射中的最后一种多对多双向关联映射. 多对多双向关联映射 按照我们之前的惯例,先看 ...

  3. Hibernate在关于一对多,多对一双向关联映射

    [Hibernate]之关于一对多,多对一双向关联映射 因为一对多.和多对一的双向关联映射基本上一样,所以这里就一起写下来! Annotations配置 @Entity @Table(name=&qu ...

  4. [置顶] Hibernate从入门到精通(十一)多对多双向关联映射

    上次我们在中Hibernate从入门到精通(十)多对多单向关联映射讲解了一下多对多单向关联映射,这次我们讲解一下七种映射中的最后一种多对多双向关联映射. 多对多双向关联映射 按照我们之前的惯例,先看一 ...

  5. Hibernate 单项多对一的关联映射

    在日常开发中会出现很对多对一的情况,本文介绍hibernate中多对一的关联映射. 1.设计表结构 2.创建student对象 3.创建Grade对象 4.写hbm.xml文件 5.生成数据库表 生成 ...

  6. Java进阶知识12 Hibernate多对多双向关联(Annotation+XML实现)

    1.Annotation 注解版 1.1.应用场景(Student-Teacher):当学生知道有哪些老师教,老师也知道自己教哪些学生时,可用双向关联 1.2.创建Teacher类和Student类 ...

  7. Java进阶知识10 Hibernate一对多_多对一双向关联(Annotation+XML实现)

    本文知识点(目录): 1.Annotation 注解版(只是测试建表)    2.XML版 的实现(只是测试建表)    3.附录(Annotation 注解版CRUD操作)[注解版有个问题:插入值时 ...

  8. Hibernate多对多双向关联的配置

    Hibernate的双向多对多关联有两种配置方法:那我们就来看看两种方案是如何配置的.  一.创建以各自类为类型的集合来关联 1.首先我们要在两个实体类(雇员<Emploee>.工程< ...

  9. Hibernate从入门到精通(十)多对多单向关联映射

    上一篇文章Hibernate从入门到精通(九)一对多双向关联映射中我们讲解了一下关于一对多关联映射的相关内容,这次我们继续多对多单向关联映射. 多对多单向关联映射 在讲解多对多单向关联映射之前,首先看 ...

随机推荐

  1. 树莓派基于scratch2控制GPIO

    本文通过MetaWeblog自动发布,原文及更新链接:https://extendswind.top/posts/technical/raspberry_scratch2_gpio_control.m ...

  2. eclipse为项目设置jdk

    1)在项目上右键选中properties,会进入如下界面 (2)然后点击Add Library,进入设置Library的界面 (3)选中JRE System Library进入下一界面就可以设置jdk ...

  3. Linux命令及作用

    uname -r :查看当前使用的Linux内核版本信息 cat /proc/cpuinfo:查看当前主机CPU型号,规格等信息 cat /proc/meminfo :查看当前主机内存信息 hostn ...

  4. Linux系统学习(一)一Linux介绍

    一.Linux初识 1.1 Linux是什么 Linux是一种自由和开放源码的类UNIX操作系统,使用Linux内核.目前存在着许多不同的Linux发行版,可安装在各种各样的电脑硬件设备,从手机.平板 ...

  5. SDM439平台出现部分机型SD卡不能识别mmc1: error -110 whilst initialising SD card【学习笔记】

    SDM439平台出现部分机型SD卡不能识别mmc1: error -110 whilst initialising SD card 打印了如下的log: - ::>[ after ms - :: ...

  6. linux系统备份恢复到本机或是别的机器上

    ubuntu系统备份还原到相同电脑.另一台电脑.(tar方式) 原创 laukal 发布于2018-07-28 15:35:14 阅读数 2205 收藏 展开 最近一直搞Xtion2,openni2, ...

  7. git - 3.分支

    分支介绍 每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支.截止到目前,只有一条时间线, 在Git里,这个分支叫主分支,即master分支. HEAD严格来说不是指向提交,而是指向mas ...

  8. iostat vmstat

    iostat https://linux.die.net/man/1/iostat https://www.geeksforgeeks.org/iostat-command-in-linux-with ...

  9. Laya的版本管理

    参考: Laya项目发布详解 发布时,勾选开启版本管理 点击上图“是否开启版本管理”右边的+号. 可以选择加入版本管理,或者排除版本管理的文件夹. 比如我要排除bin/test这个文件夹下的文件,不使 ...

  10. DEPICT实现基因优化(gene prioritization)、gene set富集分析(geneset enrichment)、组织富集分析(tissue enrichment)

    全基因组关联分析除了找到显著的关联位点,我们还可以做基因优化.geneset富集分析.组织富集分析,下面具体讲一讲怎么利用GWAS的summary数据做这个分析. summary数据就是关联分析的结果 ...