一、关系表达
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>创建两个User 12 User u1=new User(); 13 u1.setUser_name("张三"); 14 15 User u2=new User(); 16 u2.setUser_name("苏牧"); 17 18 //2>创建两个Role 19 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属性,保存用户时同时保存相应角色。