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<>();} - 联系人类:
- 客户映射文件:
- 联系人映射文件:
级联保存:
- 添加一个客户,为这个客户添加多个联系人。可以通过以下方式实现:
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);级联删除:
- 删除一个客户,该客户所有的联系人也会被删除。可以通过以下方式实现:
session.delete(customer);
级联修改:
- 修改联系人所属客户,可以通过以下方式实现:
Customer baidu = session.get(Customer.class, 1);LinkMan lucy = session.get(LinkMan.class, 2);lucy.setCustomer(baidu);session.update(lucy);
- 用户类:
- 角色类:
- 用户映射文件:
- 角色映射文件:
级联保存:
- 添加用户并为其分配角色,可以通过以下方式实现:
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);级联删除:
- 删除用户,相关角色也会被删除:
session.delete(user);
维护关系:
- 添加角色到用户:
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);
public class LinkMan { private Integer lkm_id; private String lkm_name; private String lkm_gender; private String lkm_phone; private Customer customer;} 映射文件配置
一对多级联操作
Hibernate多对多操作
多对多映射配置
以用户与角色为例,创建第三张表user_role,并配置以下关系:
public class User { private Integer user_id; private String user_name; private String user_password; private Set setRole = new HashSet<>();} public class Role { private Integer role_id; private String role_name; private String role_memo; private Set setUser = new HashSet<>();} 映射文件配置
多对多级联操作
通过以上配置和操作,可以有效地管理Hibernate的一对多和多对多关系。
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2026年06月15日 09时00分18秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
PHP设计模式之----观察者模式
2023-03-02
php设计模式之装饰器模式
2023-03-02
R&Python Data Science系列:数据处理(5)--字符串函数基于R(一)
2023-03-02
PHP设计模式:观察者模式
2023-03-02
php访问mysql(1)
2023-03-02
php详细学习1
2023-03-02
php语言优劣
2023-03-02
PHP语言最优雅的支付SDK扩展包
2023-03-02
PHP请求https域名发生segment fault段错误
2023-03-02
PHP读写XML文件
2023-03-02
PHP读写XML文件
2023-03-02
R&Python Data Science 系列:数据处理(3)
2023-03-02
php读取xml 数据库字段超长处理
2023-03-02
php课程 12-40 抽象类的作用是什么
2023-03-02
php课程 4-16 数组自定义函数(php数组->桶)
2023-03-02
PHP调用接口用post方法传送json数据
2023-03-02
php转化IP为整形
2023-03-02
php输出数据到csv文件
2023-03-02
php输出语句
2023-03-02
php运行原理详细说明
2023-03-02