这篇 单向的多对多关联映射

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

2.类结构

Permission.java

public class Permission implements Serializable{
private int id;
private String name;
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;
} }

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

3.映射文件

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"/>
</class>
</hibernate-mapping>

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>

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());
} HibernateUtil.close();
}
}

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

  1. java之hibernate之双向的多对一关联映射

    这篇讲解 双向的多对一关联映射 1.表结构和多对一时,一致 2.类结构 Book.java public class Book implements Serializable{ private int ...

  2. java之hibernate之单向的一对多关联映射

    这篇主要讲hiberante中的 单向一对多关联映射 1.在应用中,有时候需要从一的一端获取多的一端的数据.比如:查看某个分类下的所有书籍信息:查看某个订单下的所有商品等. 2.在一对多的关联关系中, ...

  3. Hibernate(六)——多对多关联映射

    前面几篇文章已经较讲解了三大种关联映射,多对多映射就非常简单了,不过出于对关联映射完整性的考虑,本文还是会简要介绍下多对多关联映射. 1.单向多对多关联映射 情景:一个用户可以有多个角色,比如数据录入 ...

  4. 一口一口吃掉Hibernate(六)——多对多关联映射

    今天来说说hibernate中的多对多关联映射,多对多关联映射涉及到单向映射和双向映射2种. 首先举个多对多关联例子:用户User和角色Role,一个用户可以属于多个角色,一个角色可以有多个用户.这就 ...

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

    1.创建如下项目结构 2.在项目的src下创建hibernate.cfg.xml主配置文件 <?xml version="1.0" encoding="UTF-8& ...

  6. (Hibernate进阶)Hibernate映射——多对多关联映射(八)

    多对多映射是现实生活中最常见的映射,也是最容易理解的映射.废话少说,直接开始. 映射原理 不论是单向关联还是双向关联都是通过第三张表,将两个表中的主键放到第三张做一个关联.用第三张表来解决可能会造成数 ...

  7. 【SSH进阶之路】Hibernate映射——多对多关联映射(八)

    上篇博文[SSH进阶之路]Hibernate映射——一对多关联映射(七),我们介绍了一对多关联映射,它是多对多关联映射的基础. 多对多映射是现实生活中最常见的映射,也是最容易理解的映射.废话少说,直接 ...

  8. hibernate多对多关联映射

    关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...

  9. Hibernate框架之双向多对多关系映射

    昨天跟大家分享了Hibernate中单向的一对多.单向多对一.双向一对多的映射关系,今天跟大家分享下在Hibernate中双向的多对多的映射关系 这次我们以项目和员工举个栗子,因为大家可以想象得到,在 ...

随机推荐

  1. javascript预览本地图片

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. ES6 展开运算符 三个点实际功能

    1.数组中使用let defaultColors = ['red', 'greed'] let favoriteColors = ['orange', 'yellow'] let fallColors ...

  3. Pandas使用实用技巧

    Pandas实用使用技巧 1 列拆分成行 常见的需求是将某一列根据指定的分隔符拆分成多列.现有需求,根据指定的分隔符将其拆分为多行. 例: df = A B 0 a f 1 b;c h;g 2 d k ...

  4. 「PKUSC2018」PKUSC

    传送门 Solution  考虑求每个点的贡献 等价于一个以OA长为半径的圆心为原点的圆在多边形内的弧对应的角度/\(2\pi\) 求弧度可以利用三角剖分 在原点的点要特判,采用射线法就可以了 Cod ...

  5. D3.js的v5版本入门教程(第三章)—— 选择元素和绑定数据

    D3.js的v5版本入门教程(第三章) 在D3.js中,选择元素和绑定元素是最基本的内容,也是很重要的内容,等你看完整个教程后你会发现,这些D3.js教程都是在选择元素和绑定元素的基础上展开后续工作的 ...

  6. 安装EOS合约工具eosio.cdt

    安装: 安装完之后 会产生 eosio-cpp_, eosio-cc, eosio-ld, eosio-pp, and _eosio_abigen (These are the C++ compile ...

  7. git 比较实用的命令

    git 删除已经add 过的文件 使用 git rm 命令即可,有两种选择, 使用 git rm 命令即可,有两种选择, 一种是 git rm --cached "文件路径",不删 ...

  8. IfcWallStandardCase 构件吊装模拟

    wall_node = (osg::Node*)(index_node->clone(osg::CopyOp::DEEP_COPY_ALL));vc_mobileCrane->tranMo ...

  9. C# 编译器 和 反编译器,你要哪个(歪头)? 我全都要(捏拳)!

    前言 从 C# 6.0 开始,C# 编译器就从以前由 C++ 实现的 csc.exe 换成了用 C# 重新实现的开放式 API 式编译服务 Roslyn.这个编译器到现在已经替代了老式编译器,从前 W ...

  10. 使用pyinstaller将python打包成exe文件

    步骤: 1)win+R 输入cmd打开dos窗口   2)先安装pyinstaller: pip install pyinstaller 3)然后使用cd命令进入项目文件的路径下:   4)再使用命令 ...