Hibernate中一对多和多对一关系
只需要从一方获取另一方的数据时 就使用单向关联
双方都需要获取对方数据时 就使用双向关系
部门--人员
使用人员时
如果只需要获取对应部门信息(user.getdeptarment())
不需要 从部门下的人员信息时,就配置成单向 多对一
使用部门时
如果只需要获取部门下人员信息(deptartmanet.getusers())
不需要 从人员获取部门信息时,就配置成单向 一对多
既要获取部门下人员 deptartmanet.getusers()
又要从人员获取部门信息 user.getdeptarment()
那就 配置成双向一对多,也就是双向多一
看需求来配置了。
2、策略
关联关系的本质是将关联关系映射到数据库中。关联关系在对象模型中体现为内存中的一个或多个引用。 一对多关系: 一对多关系 分为“单向一对多/多对一关系”和“双向多对一”关系。
• “单向一对多/多对一关系”只需在“一”/“多”方进行配置,
• “双向多对一关系”需要在关联双方均加以配置。 双向多对一关联就是在多方和一方都进行配置,并在“一” 方通过属性inverse="true"设置控制关系反转
注:单向多对一关联是最常见的单向关联关系。
注:双向多对一关联是最常见的双向关联关系。双向多对一关联实际上是“多对
一”与“一对多”关联的组合。
|
多对一及一对多关联映射的区别(单向):
|
不管多对一还是一对多,都是在"多"的一端添加一个外键指向"一"的一端,只不过是多对一是在多的一端为其自己添外键,而一对多则是在一的一端为多的一端添加外主键。
|
模型:一个用户组(group)对应多个用户(user)。
|
多对一关联映射:是在"多"的一端添加一个外键指向"一"的一端,它维护的关系为多到一的关系,如:当载入一个用户(user)时将会同时载入组(group)的信息。它的关系映射将写在多的一端(user):
<many-to-one name="group" column="relatedGroup" cascade="all" /> 此时它在多的一端(user)添加了一个外键“relateGroup”指向一的一端。在多的一端通过group维护一的一端。
|
一对多关联映射:是在"一"的一端为多的一端添加外主键,它维护的关系为一到多的关系,如:当载入一个组(group)时将会同时载入此组用户(user)的信息。它的关系映射将写在一的一端(group):
<set name="users" order-by="name">
|
<key column="relatedGroup"/>
|
<one-to-many class="com.dvnchina.hibernate.User"/>
</set>
此时通过<key column="relatedGroup"/>在多的一端(user)添加了一个外键“relateGroup”指向一的一端。在一的一端通过users维护多的一端。
|
总之,一对多和多对一的映射策略是一致的,都是通过在"多"的一端添加一个外键指向"一"的一端,只是站的角度不同。
个人总结:
1、cascade写在某方,表示在操作此方时,与此方关联的另一方是否被操作。此关联是指操作时对象中包含的对象(比如保存部门时,dept.setEm(em),em对象也被保存)。
比如部门表--员工表,双向多多对一,cascade="delete"写在部门表,那么表示在删除部门时与此部门相关的员工也全部被删除!
2、关系的维护(inverse)通常都是交给多方
|

Hibernate中一对多和多对一关系的更多相关文章
- java框架之Hibernate(3)-一对多和多对多关系操作
一对多 例:一个班级可以有多个学生,而一个学生只能属于一个班级. 模型 package com.zze.bean; import java.util.HashSet; import java.util ...
- Hibernate自身一对多和多对多关系映射
一对多关系映射大家都明白,关系双方都一个含有对方多个引用,但自身一对多很多同学都不明白什么意思,那么首先我就说明一下什么是自身一对多,其实也很好理解,自身一对多就是自身含有本身的多个引用,例如新闻类别 ...
- ABP框架中一对多,多对多关系的处理以及功能界面的处理(1)
在我们开发业务的时候,一般数据库表都有相关的关系,除了单独表外,一般还包括一对多.多对多等常见的关系,在实际开发过程中,需要结合系统框架做对应的处理,本篇随笔介绍基于ABP框架对EF实体.DTO关系的 ...
- Hibernate 中一对多和多对多映射
1. 一对多映射 1.1 JavaWeb 一对多建表原则 多方表的外键指向一方表的主键; 1.2 编写一对多的 JavaBean // 客户(一方)和联系人(多方) // 客户(一方) JavaBea ...
- hibernate中一对多多对一关系设计的理解
1.单向多对一和双向多对一的区别? 只需要从一方获取另一方的数据时 就使用单向关联双方都需要获取对方数据时 就使用双向关系 部门--人员 使用人员时如果只需要获取对应部门信息(user.getdept ...
- EF里一对一、一对多、多对多关系的配置和级联删除
本章节开始了解EF的各种关系.如果你对EF里实体间的各种关系还不是很熟悉,可以看看我的思路,能帮你更快的理解. I.实体间一对一的关系 添加一个PersonPhoto类,表示用户照片类 /// < ...
- Django 一对多,多对多关系解析
[转]Django 一对多,多对多关系解析 Django 的 ORM 有多种关系:一对一,多对一,多对多. 各自定义的方式为 : 一对一: OneToOneField ...
- JPA一对多和多对一关系
1-m:多的一方为关系维护端,关系维护端负责外键纪录的更新,关系被维护端没有权力更新外键纪录. 维护端注解 @OneToMany(cascade = { CascadeType.PERSIST, Ca ...
- EF——一对一、一对多、多对多关系的配置和级联删除 04(转)
EF里一对一.一对多.多对多关系的配置和级联删除 本章节开始了解EF的各种关系.如果你对EF里实体间的各种关系还不是很熟悉,可以看看我的思路,能帮你更快的理解. I.实体间一对一的关系 添加一个P ...
随机推荐
- java 自定义标签 传值
<?xml version="1.0" encoding="UTF-8" ?> <taglib xmlns="http://ja ...
- hdu4747——Mex
1.题目大意:对一个序列的每一个区间求Mex,最后所有的mex相加(mex就是SG的那个),力求nlogn... 2.分析:最近开始刷线段树了,还是有很多不会啊 首先把1-1 1-2 1-- 1-n这 ...
- 手把手教你crontab排障
导读 crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,cr ...
- java项目导入IntelliJ IDEA
(0)之所以有第0步,是因为第一次倒入失败,所以从删除上次倒入的数据开始- 开始删除数据. 启动Intelli J,点击右键删除上次的导入的项目 把配置拷贝到.m2文件夹下,并且删除上次下载的一些依赖 ...
- [codevs1380]没有上司的舞会([BZOJ2060][Usaco2010 Nov]Visiting Cows 拜访奶牛)
[codevs1380]没有上司的舞会 试题描述 Ural大学有N个职员,编号为1~N.他们有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.每个职员有一个快乐指数.现 ...
- hiho一下 第一百零七周 Give My Text Back(微软笔试题)
题目1 : Give My Text Back 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 To prepare for the English exam Littl ...
- OpenCv高斯,中值,均值,双边滤波
#include "cv.h" #include "highgui.h" #include <iostream> using namespace s ...
- 好无语的问题----include 后面需要空格么?
前俩天回学校办事,在去师弟宿舍的时候,被问到了一个很 "深奥"得问题 ---------include 后面需要空格么? 在我以前的印象中不管在哪个编译器中,,都是需要有空格的, ...
- Java微博搜索关键字采集
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...
- linux命令——mutt的安装和使用【转】
linux命令--mutt的安装和使用[转] 首先介绍一下mutt这个软件,它是一款基于文字界面的邮件客户端,非常小巧,但功能强大,可以用它来读写,回复保存和删除你的邮件,能在linux命令行模式下收 ...