Hibernate框架学习(七)——多对多关系
2024-09-05 20:52:09
一、关系表达
1、表中的表达
2、实体中的表达
3、orm元数据中的表达
在User.hbm.xml中添加:
在Role.hbm.xml中添加(与上相反):
二、操作关联属性
1、保存员工及角色
public class Demo {
@Test
//保存员工以及角色
public void fun1(){
//1.获得session
Session session = HibernateUtils.openSession();
//2.开启事务
Transaction tx= session.beginTransaction();
//3.操作
//=================================
//1>创建两个User
User u1=new User();
u1.setUser_name("张三"); User u2=new User();
u2.setUser_name("苏牧"); //2>创建两个Role
Role r1=new Role();
r1.setRole_name("总裁"); Role r2=new Role();
r2.setRole_name("保安"); //3>用户表达关系
u1.getRoles().add(r1);
u1.getRoles().add(r2); u2.getRoles().add(r1);
u2.getRoles().add(r2);
//4>角色表达关系
r1.getUsers().add(u1);
r1.getUsers().add(u2); r2.getUsers().add(u1);
r2.getUsers().add(u2); //5>调用Save方法一次保存
session.save(u1);
session.save(u2);
session.save(r1);
session.save(r2);
//=================================
//4.提交事务
tx.commit();
//5.关闭资源
session.close();
}
}
直接执行会报错,因为在多对多关系中,一定要选择一方放弃维护关系!(可以选择去掉角色表达关系的四行代码)
2、为张三新增角色(只需要修改步骤三操作里面的内容)
//1>获得张三用户
User user = session.get(User.class, 1l);
//2>创建角色-公关
Role r=new Role();
r.setRole_name("公关");
//3>将角色添加到用户中
user.getRoles().add(r);
//4>将角色转换为持久化
session.save(r);
3、为张三解除一个角色(也只需要修改步骤三操作里面的内容)
//1>获得张三用户
User user = session.get(User.class, 1l);
//2>获得要操作的角色对象(保安)
Role r=session.get(Role.class, 2l);
//3>将角色从用户的角色集合中移除
user.getRoles().remove(r);
三、进阶操作
1、inverse属性
基于上述操作1保存操作,如果不去掉任何代码,在配置文件Role.hbm.xml中添加inverse属性,并设置为true,同样也能完成操作。
2、级联属性
基于上述操作2新增操作,可以选择去掉最后的save操作,在配置文件User.hbm.xml中使用cascade属性,保存用户时同时保存相应角色。
最新文章
- Util应用程序框架公共操作类(十):可空值类型扩展
- Sharepoint学习笔记—习题系列--70-573习题解析 -(Q142-Q143)
- HTML 学习笔记 JavaScript (String)
- review again and again
- MyBatis知多少(11)企业数据库
- Codevs 5126 推销员 2015年NOIP全国联赛普及组
- 转移python
- eclipse安装CDT插件遇到的问题
- 直接下载adobe的完整安装包
- Thrift 使用方法
- 前端面试题总结:HTML5,JS,CSS3,兼容性。
- MySQL数据库—查询基础,简单查询,条件查询,对查询结果排序
- Android 字体修改,所有的细节都在这里 | 开篇
- C#的Lock
- ios设置音乐audio自动播放
- tomcat cluster session同步时保存map数据遇到的问题
- stimulus(6300✨)
- dos2unix 批量转化文件
- python数据结构与算法 29-1 哈希查找
- 高性能网站架构缓存——redis集群