Hibernate框架学习——多对多关系

Posted 会飞的咸鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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属性,保存用户时同时保存相应角色。

以上是关于Hibernate框架学习——多对多关系的主要内容,如果未能解决你的问题,请参考以下文章

(转)Hibernate框架基础——多对多关联关系映射

Hibernate学习8—Hibernate 映射关系(多对多)

Hibernate学习笔记 — 多对多关系映射

Hibernate学习笔记 --- 创建基于中间关联表的多对多映射关系

Hibernate框架学习之注解配置关系映射

框架 day32 Hibernate,一级缓存,关联关系映射(一对多,多对多)