
Hibernate多对多操作
发布日期:2021-05-07 02:39:51
浏览次数:31
分类:精选文章
本文共 5869 字,大约阅读时间需要 19 分钟。
文章目录
1:多对多映射配置
以用户和角色为例
第一步:创建实体类,用户和角色
第二步:让两个实体类之间互相表示
(1)一个用户里面表示所有角色。使用set集合
(2) 一个角色有多个用户,使用set集合
User.java
package hibernate.manytomany;import java.util.HashSet;import java.util.Set;public class User { private Integer user_id;//用户id private String user_name;//用户名称 private String user_password;//用户密码 private Setsetuser=new HashSet (); public Integer getUser_id() { return user_id; } public void setUser_id(Integer user_id) { this.user_id = user_id; } public String getUser_name() { return user_name; } public void setUser_name(String user_name) { this.user_name = user_name; } public String getUser_password() { return user_password; } public void setUser_password(String user_password) { this.user_password = user_password; } public Set getSet() { return setuser; } public void setSet(Set set) { this.setuser = set; }}
Role.java
package hibernate.manytomany;import java.util.HashSet;import java.util.Set;public class Role { private Integer role_id;//角色id private String role_name;//角色名称 private String role_description;//角色描述 private Setsetrole=new HashSet (); public Integer getRole_id() { return role_id; } public void setRole_id(Integer role_id) { this.role_id = role_id; } public String getRole_name() { return role_name; } public void setRole_name(String role_name) { this.role_name = role_name; } public String getRole_description() { return role_description; } public void setRole_description(String role_description) { this.role_description = role_description; } public Set getSet1() { return setrole; } public void setSet1(Set set1) { this.setrole = set1; }}
第三步:配置映射关系
(1)基本配置
(2)配置多对多关系
- 在用户里面表示所有角色,使用set标签
- 在角色里面表示所有用户,使用set标签
role.hbm.xml部分代码片段
user.hbm.xml部分代码片段
第四步:在核心配置文件中引入映射文件
hibernate.cfg.xml
com.mysql.jdbc.Driver jdbc:mysql:///mysql_studying root zlj18059008512 true true update org.hibernate.dialect.MySQLDialect Thread
2:多对多级联保存(重点)
问题:根据用户保存角色
第一步:在用户配置文件中,使用set标签里的cascade属性进行配置,cascade="save-update"user.hbm.xml部分代码片段
第二步:写代码实现
(1)创建用户和角色对象。把角色收到用户里面。最终保存用户就可以了。@Test //演示多对多操作(级联保存) public void testSave() { Configuration configuration=new Configuration(); SessionFactory sessionFactory=null; Session session=null; Transaction transaction=null; try { configuration.configure(); sessionFactory=HibernateUtilities.getSessionFactory(); session=HibernateUtilities.getSessionObject(); transaction=session.beginTransaction(); //添加两个用户,为每个用户添加两个角色 //1:创建对象 User user1=new User(); User user2=new User(); user1.setUser_id(1); user1.setUser_name("zlj"); user1.setUser_password("123456"); user2.setUser_id(2); user2.setUser_name("zl"); user2.setUser_password("12345"); Role role1=new Role(); Role role2=new Role(); Role role3=new Role(); role1.setRole_id(1); role1.setRole_description("开车"); role1.setRole_name("司机"); role2.setRole_id(2); role2.setRole_description("打扫"); role2.setRole_name("保洁"); role3.setRole_id(3); role3.setRole_description("保卫"); role3.setRole_name("保安"); //2:建立关系把角色放到用户里 user1.getSet().add(role1); user1.getSet().add(role2); user2.getSet().add(role3); user2.getSet().add(role2); //3:保存用户 session.save(user2); session.save(user1); transaction.commit(); } catch (Exception e) { transaction.rollback(); }finally { session.close(); sessionFactory.close(); } }
3:多对多级删除
//演示多对多操作(级联删除) public void testDelete() { Configuration configuration=new Configuration(); SessionFactory sessionFactory=null; Session session=null; Transaction transaction=null; try { configuration.configure(); sessionFactory=HibernateUtilities.getSessionFactory(); session=HibernateUtilities.getSessionObject(); transaction=session.beginTransaction(); User user=session.get(User.class, 1); session.delete(user); transaction.commit(); } catch (Exception e) { transaction.rollback(); }finally { session.close(); sessionFactory.close(); } }
4:维护第三张表
//演示多对多操作(维护第三张表) public void testMaintain() { Configuration configuration=new Configuration(); SessionFactory sessionFactory=null; Session session=null; Transaction transaction=null; try { configuration.configure(); sessionFactory=HibernateUtilities.getSessionFactory(); session=HibernateUtilities.getSessionObject(); transaction=session.beginTransaction(); //演示让某个用户拥有某个角色 //1:查询指定用户和角色 User user=session.get(User.class, 1); Role role=session.get(Role.class, 1); //2:把角色放到指定用户里 user.getSet().add(role); /**演示让某个用户不拥有某个角色 //1:查询指定用户和角色 User user=session.get(User.class, 1); Role role=session.get(Role.class, 1); //2:把角色放到指定用户里,然后移除 user.getSet().remove(role);*/ transaction.commit(); } catch (Exception e) { transaction.rollback(); }finally { session.close(); sessionFactory.close(); } }
发表评论
最新留言
很好
[***.229.124.182]2025年04月18日 20时28分54秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【JavaScript】动态原型模式创建对象 ||为何不能用字面量创建原型对象?
2021-05-09
Linux应用-线程操作
2021-05-09
多态体验,和探索爷爷类指针的多态性
2021-05-09
系统编程-进程间通信-无名管道
2021-05-09
记2020年初对SimpleGUI源码的阅读成果
2021-05-09
C语言实现面向对象方法学的GLib、GObject-初体验
2021-05-09
系统编程-进程-ps命令、进程调度、优先级翻转、进程状态
2021-05-09
为什么我觉得需要熟悉vim使用,难道仅仅是为了耍酷?
2021-05-09
一个支持高网络吞吐量、基于机器性能评分的TCP负载均衡器gobalan
2021-05-09
HDOJ2017_字符串统计
2021-05-09
高等软工第二次作业《需求分析阶段总结》
2021-05-09
404 Note Found 团队会议纪要
2021-05-09
CentOS安装Docker-ce并配置国内镜像
2021-05-09
使用JWT作为Spring Security OAuth2的token存储
2021-05-09
使用Redis作为Spring Security OAuth2的token存储
2021-05-09
【SOLVED】Linux使用sudo到出现输入密码提示延迟时间长
2021-05-09
项目引入非配置的文件,打成war包后测试报错的可能原因
2021-05-09
Git学习笔记
2021-05-09