码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2018-02-14 17:06:35      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:test   配置   用户   session   void   关闭   name   关联   com   

一、关系表达

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

技术分享图片

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

标签:test   配置   用户   session   void   关闭   name   关联   com   

原文地址:https://www.cnblogs.com/cxq1126/p/8446915.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!