一、关系表达
1、表中的表达
2、实体中的表达
3、orm元数据中的表达
在User.hbm.xml中添加:
在Role.hbm.xml中添加(与上相反):
二、操作关联属性
1、保存员工及角色
1 public class Demo { 2 ????@Test 3 ????//保存员工以及角色 4 ????public void fun1(){ 5 ????????//1.获得session 6 ????????Session session = HibernateUtils.openSession(); 7 ????????//2.开启事务 8 ????????Transaction tx= session.beginTransaction(); 9 ????????//3.操作10 ????????//=================================11 ????????//1>创建两个User12 ????????User u1=new User();13 ????????u1.setUser_name("张三");14 ????????15 ????????User u2=new User();16 ????????u2.setUser_name("苏牧");17 ????????18 ????????//2>创建两个Role19 ????????Role r1=new Role();20 ????????r1.setRole_name("总裁");21 ????????22 ????????Role r2=new Role();23 ????????r2.setRole_name("保安");24 ????????25 ????????//3>用户表达关系26 ????????u1.getRoles().add(r1);27 ????????u1.getRoles().add(r2);28 ????????29 ????????u2.getRoles().add(r1);30 ????????u2.getRoles().add(r2);31 ????????//4>角色表达关系32 ????????r1.getUsers().add(u1);33 ????????r1.getUsers().add(u2);34 ????????35 ????????r2.getUsers().add(u1);36 ????????r2.getUsers().add(u2);37 ????????38 ????????//5>调用Save方法一次保存39 ????????session.save(u1);40 ????????session.save(u2);41 ????????session.save(r1);42 ????????session.save(r2);43 ????????//=================================44 ????????//4.提交事务45 ????????tx.commit();46 ????????//5.关闭资源47 ????????session.close();48 ????}49 }
直接执行会报错,因为在多对多关系中,一定要选择一方放弃维护关系!(可以选择去掉角色表达关系的四行代码)
2、为张三新增角色(只需要修改步骤三操作里面的内容)
1 //1>获得张三用户2 ????????User user = session.get(User.class, 1l);3 ????????//2>创建角色-公关4 ????????Role r=new Role();5 ????????r.setRole_name("公关");6 ????????//3>将角色添加到用户中7 ????????user.getRoles().add(r);8 ????????//4>将角色转换为持久化9 ????????session.save(r);
3、为张三解除一个角色(也只需要修改步骤三操作里面的内容)
1 //1>获得张三用户2 ????????User user = session.get(User.class, 1l);3 ????????//2>获得要操作的角色对象(保安)4 ????????Role r=session.get(Role.class, 2l);5 ????????//3>将角色从用户的角色集合中移除6 ????????user.getRoles().remove(r);
三、进阶操作
1、inverse属性
基于上述操作1保存操作,如果不去掉任何代码,在配置文件Role.hbm.xml中添加inverse属性,并设置为true,同样也能完成操作。
2、级联属性
基于上述操作2新增操作,可以选择去掉最后的save操作,在配置文件User.hbm.xml中使用cascade属性,保存用户时同时保存相应角色。
Hibernate框架学习(七)——多对多关系
原文地址:https://www.cnblogs.com/cxq1126/p/8446915.html