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

  • 相关阅读:
    阿里云播放器弹幕选型
    使用swiper组件,轮播图在高分辨率情况下变形,图片拉高该如何解决?
    解决图片无法设置hover,以设置图片的阴影
    当标题文字超出长度后,后续用...来代替
    windows 安装wget
    【Go学习】GO中...的用法
    【Go】go test
    tcpdump工具及使用介绍
    leetcode32.最长有效括号
    Global Round 21 部分题解
  • 原文地址:https://www.cnblogs.com/cxq1126/p/8446915.html
Copyright © 2020-2023  润新知