Hibernate框架学习(七)——多对多关系

一、关系表达

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属性,保存用户时同时保存相应角色。

转载于:https://www.cnblogs.com/cxq1126/p/8446915.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值