SSH学习笔记(7)__Hibernate_配置一对多和多对多
发布日期:2021-04-30 21:01:50 浏览次数:112 分类:精选文章

本文共 3277 字,大约阅读时间需要 10 分钟。

Day03 - Hibernate关系管理

一对多关系的建立

1. 一对多关系的理解

一对多关系是常见的数据关系,适用于类似以下场景:

  • 分类与商品:一个分类可以包含多个商品,但一个商品只能属于一个分类。
  • 客户与联系人:一个客户可以有多个联系人,但每个联系人只能属于一个客户。

2. 一对多关系的建表

通过外键实现一对多关系。例如:

  • 商品表分类表之间的关系:商品表中设置一个外键,指向分类表的主键。
  • 联系人表客户表之间的关系:联系人表中设置一个外键,指向客户表的主键。

多对多关系的建立

1. 多对多关系的理解

多对多关系适用于以下场景:

  • 订单与商品:一个订单可以包含多个商品,而每个商品可以属于多个订单。
  • 用户与角色:一个用户可以拥有多个角色,而一个角色也可以属于多个用户。

2. 多对多关系的建表

需要通过第三张表来维护多对多关系。例如:

  • 用户表角色表之间的关系:创建一张user_role表,其中包含用户ID和角色ID两个外键。

Hibernate的一对多操作

一对多映射配置(重点)

以客户和联系人为例,客户是一对多联系人。

实体类与映射文件

  • 客户类
  • public class Customer {    private Integer cid;    private String custName;    private String custLevel;    private String custSource;    private String custPhone;    private String custMobile;    private Set
    setLinkMan = new HashSet<>();}
    1. 联系人类
    2. public class LinkMan {    private Integer lkm_id;    private String lkm_name;    private String lkm_gender;    private String lkm_phone;    private Customer customer;}

      映射文件配置

    3. 客户映射文件
      1. 联系人映射文件
      2. 一对多级联操作

      3. 级联保存

        • 添加一个客户,为这个客户添加多个联系人。可以通过以下方式实现:
        Customer customer = new Customer();customer.setCustName("传智播客");customer.setCustLevel("vip");customer.setCustSource("网络");customer.setCustPhone("110");customer.setCustMobile("999");LinkMan linkman = new LinkMan();linkman.setLkm_name("lucy");linkman.setLkm_gender("男");linkman.setLkm_phone("911");customer.getSetLinkMan().add(linkman);linkman.setCustomer(customer);session.save(customer);
      4. 级联删除

        • 删除一个客户,该客户所有的联系人也会被删除。可以通过以下方式实现:
        session.delete(customer);
      5. 级联修改

        • 修改联系人所属客户,可以通过以下方式实现:
        Customer baidu = session.get(Customer.class, 1);LinkMan lucy = session.get(LinkMan.class, 2);lucy.setCustomer(baidu);session.update(lucy);
      6. Hibernate多对多操作

        多对多映射配置

        以用户与角色为例,创建第三张表user_role,并配置以下关系:

      7. 用户类
      8. public class User {    private Integer user_id;    private String user_name;    private String user_password;    private Set
        setRole = new HashSet<>();}
        1. 角色类
        2. public class Role {    private Integer role_id;    private String role_name;    private String role_memo;    private Set
          setUser = new HashSet<>();}

          映射文件配置

        3. 用户映射文件
          1. 角色映射文件
          2. 多对多级联操作

          3. 级联保存

            • 添加用户并为其分配角色,可以通过以下方式实现:
            User user1 = new User();user1.setUser_name("lucy");user1.setUser_password("123");Role r1 = new Role();r1.setRole_name("总经理");r1.setRole_memo("总经理");Role r2 = new Role();r2.setRole_name("秘书");r2.setRole_memo("秘书");user1.getSetRole().add(r1);user1.getSetRole().add(r2);session.save(user1);
          4. 级联删除

            • 删除用户,相关角色也会被删除:
            session.delete(user);
          5. 维护关系

            • 添加角色到用户:
            User lucy = session.get(User.class, 1);Role role = session.get(Role.class, 1);lucy.getSetRole().add(role);
            • 移除角色:
            User user = session.get(User.class, 2);Role role = session.get(Role.class, 3);user.getSetRole().remove(role);
          6. 通过以上配置和操作,可以有效地管理Hibernate的一对多和多对多关系。

    上一篇:2020年 第十一届蓝桥杯参赛历程总结
    下一篇:基于SpringBoot的SSM整合总结

    发表评论

    最新留言

    第一次来,支持一个
    [***.219.124.196]2026年06月15日 09时00分18秒