Hibernate的关联映射关系
一:多对一
<many-to-one
1.name:当前类的属性名(关联映射的类)
2.column:属性多对应的类的对应的表的外键(连接条件)
3.class:属性所对应的类的权限定名
4.not-null:不能为空(当持久化当前类对象时,此属性所对应的对象也就是关联映射的对象字段不能为空)
注意:此值为true时,有可能报PropertyValueException:当持久化当前类,当前类被存入数据库,而关联字段对象没有存入数据库,但关联字段又不能为空,则导致异常
当从数据库查询出当前类,但是关联字段对象在关联表里面找不到,导致关联字段对象为null也会报异常
5.lazy:延迟加载(加载当前类对象时不加载该关联映射的对象,直到使用到此字段时才加载关联映射对象)
6.cascade:save-update(级联更新):持久化当前类对象时自动持久化所有关联对象字段(注意:当持久化当前类对象时,默认不会持久化关联对象);类似的还有:delete级联删除;none:无;
级联设置为:all-delete-orphan(all+delete-orphan):当存在父子关系时,父方的cascade设置为此值,子对象必须和一个父对象关联,不允许单独存在,如果删除父对象,所有关联的子对象需删除
所有的操作都级联(删除,更新,游离对象等),如需设置则设置为:evict,delete,save-update等
/>
fetch属性:
有两个可选值:join和select
这个属性决定了你在查询的时候,是先查主表记录再查关联记录,还是要把关联表的记录一起查询出来。
select方式时先查询返回要查询的主体对象(列表),再根据关联外键id,每一个对象发一个select查询,获取关联的对象,形成n+1次查询
如果lazy=true(延迟加载),select在查询时只会查出主表记录,用到了关联数据时再自动在执行查询
而join方式,主体对象和关联对象用一句外键关联的sql同时查询出来,不会形成多次查询。
二:一对多
<set name: cascade: inverse:>
<key column=/>
<one-to-many class=/>
<set/>
inverse属性:
当出现双向关联时:如果修改双向关联中的某一个对象值,由于有双向关联,则双方对象的属性值都发生了改变,则hibernate会在两方各执行一次更新语句来更新表,实际上对于数据库来说只需要执行一次即可;
因此:在一对多的双向关联时,在"one"方设置inverse=true,来提高性能;在建立两个对象的双向关联时,同时修改关联两端的对象的相应属性
Hibernate中的inverse在表关系映射中经常应用 inverse的值有两种,“true”和“false”。inverse="false"是默认的值 inverse的作用:在hibernate中是通过inverse的设置来决定是有谁来维护表和表之间的关系的。 我们说 inverse设立不当会导致性能低下,其实是说inverse设立不当,会产生多余重复的SQL语句甚至致使JDBC exception的throw。这是我们在建立实体类关系时必须需要关注的地方。一般来说,inverse=true是推荐使用,双向关联中双方都设置 inverse=false的话,必会导致双方都重复更新同一个关系。但是如果双方都设立inverse=true的话,双方都不维护关系的更新,这也是 不行的,好在一对多中的一端:many-to-one默认是inverse=false,避免了这种错误的产生。但是多对多就没有这个默认设置了,所以很 多人经常在多对多的两端都使用inverse=true,结果导致连接表的数据根本没有记录,就是因为他们双分都没有责任维护关系。所以说,双向关联中最 好的设置是一端为inverse=true,一端为inverse=false。一般inverse=false会放在多的一端,那么有人提问了, many-to-many两边都是多的,inverse到底放在哪儿?其实hibernate建立多对多关系也是将他们分离成两个一对多关系,中间连接一个连接表。所以通用存在一对多的关系,也可以这样说:一对多是多对多的基本组成部分
注意:set关联属性最好直接初始化new hashSet()以免产生null异常
Hibernate的关联映射关系的更多相关文章
- Hibernate关联映射关系
Hibernate关联映射关系 一.双向一对多关联映射关系:当类与类之间建立了关联,就可以方便的从一个对象导航到另一个或另一组与它关联的对象(一对多双向关联和多对一双向关联是完全一样的) 1.1创建实 ...
- Hibernate注解----关联映射注解以及课程总结详解----图片版本
上一篇,记录了Hibernate注解----类级别注解以及属性注解详解 ,我们这一节主要讲解的是Hibernate注解----关联映射注解以及课程总结详解. 本节的主要内容: 第3章 关联映射注解 3 ...
- Hibernate的关联映射——单向1-N关联
Hibernate的关联映射--单向1-N关联 单向1-N关联的持久化类里需要使用集合属性.因为1的一端需要访问N的一端,而N的一端将以集合(Set)形式表现.从这个意义上来看,1-N(实际上还包括N ...
- Hibernate的关联映射——单向N-1关联
Hibernate的关联映射--单向N-1关联 N-1是非常常见的关联关系,最常见的父子关系也是N-1关联,单向的N-1关联只需从N的一端可以访问1的一端. 为了让两个持久化类能够支持这种关联映射,程 ...
- Hibernate之关联映射(一对多和多对一映射,多对多映射)
~~~接着之前的Hibernate框架接着学习(上篇面试过后发现真的需要学习以下框架了,不然又被忽悠让去培训.)~~~ 1:Hibernate的关联映射,存在一对多和多对一映射,多对多映射: 1.1: ...
- 初识Hibernate之关联映射(二)
上篇我们介绍了关联映射的几种形式,有单向多对一,单向一对多,还有双向一对多.本篇接着介绍有关关联映射的其他几种映射方式,主要有以下几种: 基于外键的单向一对一关联映射 基于主键的单向一对一关联映射 单 ...
- Hibernate的关联映射——双向1-N关联
Hibernate的关联映射--双向1-N关联 对于1-N的关联,Hibernate推荐使用双向关联,而且不要让1的一端控制关联关系,而是用N的一端控制关联关系.双线的1-N关联和N-1关联是两种相同 ...
- Hibernate的关联映射——单向1-1关联
Hibernate的关联映射--单向1-1关联 对于单向的1-1关联关系,需要在持久化类里增加代表关联实体的成员变量,并为该成员变量添加setter方法和getter方法.从持久化类的代码上看,单向1 ...
- Hibernate的关联映射
单向N-1关联 <many-to-one> 单向N-1关系,比如多个人对应同一个住址,只需要从人实体端找到对应的住址实体,无须关系某个地址的全部住户.程序在N的一端增加一个属性,该属性引用 ...
随机推荐
- 从零自学Hadoop(16):Hive数据导入导出,集群数据迁移上
阅读目录 序 导入文件到Hive 将其他表的查询结果导入表 动态分区插入 将SQL语句的值插入到表中 模拟数据文件下载 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并 ...
- 【转】最牛B的编码套路
最近,我大量阅读了Steve Yegge的文章.其中有一篇叫“Practicing Programming”(练习编程),写成于2005年,读后令我惊讶不已: 与你所相信的恰恰相反,单纯地每天埋头于工 ...
- 大数据系列(1)——Hadoop集群坏境搭建配置
前言 关于时下最热的技术潮流,无疑大数据是首当其中最热的一个技术点,关于大数据的概念和方法论铺天盖地的到处宣扬,但其实很多公司或者技术人员也不能详细的讲解其真正的含义或者就没找到能被落地实施的可行性方 ...
- SQL Server 2008 R2——根据数据查找表名和字段名 根据脏数据定位表和字段
=================================版权声明================================= 版权声明:原创文章 谢绝转载 请通过右侧公告中的“联系邮 ...
- UrlRewritingNet伪静态的使用方法与解决方案(URL重写)
在建站初期时,我们往往需要考虑的是使用真静态还是伪静态,这对于往后的站点配置,延展性都会产生深远的影响. 我使用伪静态的唯一目的:SEO优化.毋容置疑,伪静态在对于Spider是非常有利的,因此,我更 ...
- JS中误用/g导致的正则test()无法正确重复执行
一个简单的利用正则判断输入是否为数字: input1 = '0281234567';input2 = '0282345678';var reg = /^\d+$/g; reg.test(input1) ...
- 安装 Visual Studio Web Tools 的奇怪问题
安装Microsoft ASP.NET 5 RC 1 时提示 0x80070005 - 拒绝访问 日志文件为 [1968:3F64][2015-11-20T10:08:36]i010: Launchi ...
- MMORPG大型游戏设计与开发(服务器 游戏场景 动态场景与副本)
场景的内容讲解到今天算是暂时划上一个句号了,接下来为大家讲解的是AI部分(大型AI),如果有兴趣的朋友不妨持续关注这些文章,大家一起学习和进步.动态场景和副本是场景中特殊的类型,副本在这里想必已经是无 ...
- markdown学习/mou
markdown编辑器mou markdown编辑器的使用很简单,mac平台选择课 MOU 这款比较轻的客户端. 使用也很方便,打开软件,->helo->mou help 就有各种示例,照 ...
- cf之路,1,Codeforces Round #345 (Div. 2)
cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅..... ...