Hibernate_day03--课程安排_表之间关系_一对多操作
Hibernate_day03
上节内容
|
1 实体类编写规则 2 hibernate主键生成策略 3 实体类操作 (1)crud操作 (2)实体类对象状态 4 hibernate的一级缓存 5 hibernate的事务操作 (1)事务代码规则写法 6 hibernate其他的api(查询) |
今天内容
|
1 表与表之间关系回顾 (1)一对多(客户和联系人) (2)多对多(用户和角色) 2 hibernate一对多操作 (1)*一对多映射配置 (2)一对多级联保存(同时操作多个表进行保存) (3)一对多级联删除 (4)inverse属性 3 hibernate多对多操作 (1)*多对多映射配置 (2)多对多级联保存(重点) (3)多对多级联删除 (4)维护第三张表 |
表与表之间关系回顾(重点)
|
1 一对多 (1)分类和商品关系,一个分类里面有多个商品,一个商品只能属于一个分类 (2)客户和联系人是一对多关系 - 客户:与公司有业务往来,百度、新浪、360 - 联系人:公司里面的员工,百度里面有很多员工,联系员工 ** 公司和公司员工的关系 - 客户是一,联系人是多 - 一个客户里面有多个联系人,一个联系人只能属于一个客户 (3)一对多建表:通过外键建立关系
2 多对多 (1)订单和商品关系,一个订单里面有多个商品,一个商品属于多个订单 (2)用户和角色多对多关系 - 用户: 小王、小马、小宋 - 角色:总经理、秘书、司机、保安 ** 比如小王 可以 是总经理,可以是司机 ** 比如小宋 可以是司机,可以是秘书,可以保安 ** 比如小马 可以是 秘书,可以是总经理 - 一个用户里面可以有多个角色,一个角色里面可以有多个用户 (3)多对多建表:创建第三张表维护关系
3 一对一 (1)在中国,一个男人只能有一个妻子,一个女人只能有一个丈夫 |
Hibernate的一对多操作(重点)
一对多映射配置(重点)
|
以客户和联系人为例:客户是一,联系人是多 第一步 创建两个实体类,客户和联系人 第二步 让两个实体类之间互相表示 (1)在客户实体类里面表示多个联系人 - 一个客户里面有多个联系人 //在客户实体类里面表示多个联系人,一个客户有多个联系人 具体: public class Customer {
(2)在联系人实体类里面表示所属客户 - 一个联系人只能属于一个客户 //在联系人实体类里面表示所属客户,一个联系人只能属于一个客户 具体: public class LinkMan {
第三步 配置映射关系 (1)一般一个实体类对应一个映射文件 (2)把映射最基本配置完成 Customer.hbm.xml <!-- 1 配置类和表对应 LinkMan.hbm.xml <!-- 1 配置类和表对应 (3)在映射文件中,配置一对多关系 - 在客户映射文件中,表示所有联系人 Customer.hbm.xml <!-- 在客户映射文件中,表示所有联系人 - 在联系人映射文件中,表示所属客户 LinkMan.hbm.xml <!-- 表示联系人所属客户 第四步 创建核心配置文件,把映射文件引入到核心配置文件中
测试: 运行HibernateUtils.java工具类 public class HibernateUtils {
|
一对多级联操作
|
级联操作 1 级联保存 (1)添加一个客户,为这个客户添加多个联系人 2 级联删除 (1)删除某一个客户,这个客户里面的所有的联系人也删除 |
一对多级联保存
|
1 添加客户,为这个客户添加一个联系人 (1)复杂写法: public class HibernateOnetoMany {
(2)简化写法 - 一般根据客户添加联系人 第一步 在客户映射文件中进行配置 - 在客户映射文件里面set标签进行配置
第二步 创建客户和联系人对象,只需要把联系人放到客户里面就可以了,最终只需要保存客户就可以了 //演示一对多级联保存 简单写法 |
一对多级联删除
|
1 删除某个客户,把客户里面所有的联系人删除 2 具体实现 第一步 在客户映射文件set标签,进行配置 (1)使用属性cascade属性值 delete
第二步 在代码中直接删除客户 (1)根据id查询对象,调用session里面delete方法删除
3 执行过程: (1)根据id查询客户
(2)根据外键id值查询联系人
(3)把联系人外键设置为null
(4)删除联系人和客户
|
一对多修改操作(inverse属性)
|
1 让小容联系人所属客户不是小李,而是小王 //1 根据id查询小容联系人,根据id查询小王的客户 2 inverse属性 (1)因为hibernate双向维护外键,在客户和联系人里面都需要维护外键,修改客户时候修改一次外键,修改联系人时候也修改一次外键,造成效率问题
(2)解决方式:让其中的一方不维护外键 - 一对多里面,让其中一方放弃外键维护 - 一个国家有总统,国家有很多人,总统不能认识国家所有人,国家所有人可以认识总统 (3)具体实现: 在放弃关系维护映射文件中,进行配置,在set标签上使用inverse属性
|
Hibernate_day03--课程安排_表之间关系_一对多操作的更多相关文章
- 【转】Oracle - 数据库的实例、表空间、用户、表之间关系
[转]Oracle - 数据库的实例.表空间.用户.表之间关系 完整的Oracle数据库通常由两部分组成:Oracle数据库和数据库实例. 1) 数据库是一系列物理文件的集合(数据文件,控制文件,联机 ...
- Django数据库的查看、删除,创建多张表并建立表之间关系
配置以下两处,可以方便我们直接右键运行tests.py一个文件,实现对数据库操作语句的调试: settings里面的设置: #可以将Django对数据库的操作语法,能输出对应的的sql语句 LOGGI ...
- 阶段3 1.Mybatis_09.Mybatis的多表操作_1 mybatis表之间关系分析
4.mybatis中的多表查询 表之间的关系有几种: 一对多 多对一 一对一 多对多 举例: 用户和订单 ...
- Hibernate中表与表之间的关联一对多,级联保存和级联删除
1:Hibernate的一对多操作(重点) 一对多映射配置 第一步:创建两个实体类:客户和联系人(例)以客户为一,联系人为多: package com.yinfu.entity; public cla ...
- 数据库设计,表与表的关系,一对多。One-To-Many(2)
一对多:主键数据表中只能包含一个记录,而在其关系记录表中这条记录可以与一个或多个记录相关,也可以没有记录与之相关. 关联映射:一对多/多对一存在最普遍的映射关系,简单来讲就如球员与球队的关系:一对多: ...
- mysql 建立表之间关系 练习 1
练习:账号信息表,用户组,主机表,主机组 #用户表 mysql> create table user( id int not null unique auto_increment, userna ...
- mysql 建立表之间关系 练习 2
创建数据库db6 create database db6 charset=utf8; user db6; # 创建班级表 mysql) not null unique); Query OK, rows ...
- Oracle - 数据库的实例、表空间、用户、表之间关系
完整的Oracle数据库通常由两部分组成:Oracle数据库和数据库实例. 1) 数据库是一系列物理文件的集合(数据文件,控制文件,联机日志,参数文件等): 2) Oracle数据库实例则是一组Ora ...
- mysql 建立表之间关系 一对一 练习1
创建db5数据库 create database db5 charset=utf8; use db5; 例一:一个用户只有一个博客 用户表: id name 1 mike 2 alex 3 jack ...
随机推荐
- 转载【linux】Linux学习之CentOS6.x+7.x---网卡的配置
转载至:http://www.cnblogs.com/smyhvae/p/3932903.html [正文] Linux系统版本:Centos 6.5 Linux系统版本:Centos 7 目的:将c ...
- window.open()函数
http://hi.baidu.com/gagahjt/blog/item/7b76e0dee61b20aecd11661c.html open函数详解: window.open("sUrl ...
- Android Native IPC 方案支持情况
Binder - 不支持Native层的binder 内存共享 - 不支持 信号量(信号灯) - 不支持 消息队列 - 不支持 信号 - 支持,但是不能用sigqueue传消息,只能用来安装信号,可以 ...
- EMQ ---客户端clientid为空,emq会随机帮忙生成
mqtt v3.1.1协议有规定clientid可以为空,所以当客户端clientid为空,emq会随机帮忙生成. 如果clientid为空,随机生成clientid.例如'emqttd_105789 ...
- 我使用过的Linux命令之clear - 清除终端屏幕,不是cls
原文链接:http://codingstandards.iteye.com/blog/804213 用途说明 clear命令是用来清除终端屏幕的(clear the terminal screen), ...
- GridControl摘录
gvCabTotalInfo.Columns["出线平均<br>电压"].SummaryItem.SummaryType = DevExpress.Data.Summa ...
- autoHotKey 一些脚本积累
新建test.ahk,然后运行即可. #InstallKeybdHook #Persistent Hotstring("EndChars", "`n") ; 设 ...
- Mongodb与mysql语法比较
Mongodb与mysql语法比较 mongodb与mysql命令对比 传统的关系数据库一般由数据库(database).表(table).记录(record)三个层次概念组成,MongoDB是由 ...
- Redis(十三):Redis分布式锁的正确实现方式
前言 分布式锁一般有三种实现方式:1. 数据库乐观锁:2. 基于Redis的分布式锁:3. 基于ZooKeeper的分布式锁.本篇博客将介绍第二种方式,基于Redis实现分布式锁.虽然网上已经有各种介 ...
- 使用Secure Boot后,导致VMware无法启动虚拟机
最初安装vmware时就报错 Gtk-Message: Failed to load module "canberra-gtk-module": libcanberra-gtk- ...














