Hibernate关系对映-表映射基于XML配置方式
来源:互联网 发布:知乎非常了得 编辑:程序博客网 时间:2024/05/20 22:36
个人框架初学者,觉得hibernate的内容多,不多写肯定记不下来,写多了也不一定能信手拈来。所以今天写下一个总结,重温一遍,有需要的可以看看,大概分为:
1.对应关系(一对多 多对一 双向一对多 基于主键1对1基于外键1对1
多对多),小白只会xml配置方式,请原谅
2.缓存(一级缓存,二级缓存,查询缓存,我博客里有相关文章,这里我不写了)
3.HQL方面的靠自己多多练习,这里也没办法写什么。
如果只是需要查询该文章的一个小知识点可以Ctrl+F查询
这里需要的jar包:hibernate 4.0需要的jar包,mysql的jdbc驱动
1.单向多对1,这里我会贴出bean类的字段已经对xml配置文件的部分属性解释
类比:1个人有多辆车,反之多个车的主人是同一个,所以仅需要在Car里添加字段Person
这是car的xml配置文件,Person的配置文件和普通bean类配置文件一样
这里主要讲 最后一个属性<many-to-one></many-to-one>,name对应bean类person属性的属性名,column是即将在该表,本处即hibernate_More2One_car 表增加一列 Person_id用来对应Person表的主键,从而实现单向多对1(Ps:什么为单向,这里 仅个人理解解释一下,hibernate是一个ORM框架,关系对象映射,即对关系的处理,即对表的处理都是通过处理对象来实现关联映射,因为这里是单向的,所以我们仅仅只能使用car类对象获取person的值,而不能通过person获得car)lazy属性 懒加载 属性,默认为false 开始即为proxy,何为懒加载,就是在加载主类对象时,不同时加载属性里的对象属性,这里相当于person属性,只有在需要用到的时候才加载,如果再session关闭后进行加载则会抛出懒加载异常
举个例子,我关闭了懒加载异常,session获得一个car对象,这个时候有2个查询语句,但是如果我开启懒加载,同样获得car只需要1个查询语句,但是当你需要获得person时候又发出一条查询语句,如果你开启了懒加载,但是在session关闭后获取person就会抛出异常(Exception in thread "main" org.hibernate.LazyInitializationException: could not initialize proxy - no Session)
2.单向1对多
Car的bean类字段保持不变,改变person
Car和Person的xml配置文件发生一点变换
因为是单向的,所以在Car里删除了many to one,并且在person里配置了set属性
Name对应person字段属性名,key属性是在car对应表里增加一个字段,最后生成的2个表的表结构是和上面多对一的表结构是一样的
3.双向1对多(也叫双向多对1)
Bean类字段不变,xml属性变。Xml的变化有点类似单向的xml配置文件,即Car里要重新配置一个Many to one 然后Person里还要保持Set属性,上图:
这里出现了2个前面没有的属性cascade(级联属性),学过数据库的都知道,级联操作就不讲解了,里面有好几个选项,如delete。inverse控制反转,该属性在后面会出现,当true时,即该关联关系的控制权被反转在另一方,如这里的Person inverse属性设置为true则控制权在Car这边,至于这个控制权是什么意思,我在百度上摘录了一段解释:
(控制权在哪边哪边就得负责维护关系,即代码就需要加入相关的set操作,save-update可以减少相应save代码)
http://lijiejava.iteye.com/blog/776587
PS:一般控制权留在多的一方,可以减少update语句,改善性能!
4.基于外键的1对1
就是在2个关联表里选取一个字段做另一个表主键的外键!
上xml!
生成的表用mysql查看后:
Property-ref这个属性讲一下:
http://blog.csdn.net/fengyuanfa/article/details/5096764
5.基于主键的1对1
Hibernate有自己的主键生成策略 里面就有一个是 foreign策略,根据其他bean类主键生成自己的主键,相当于绑定起来。生成的表结构都是主键一致的。
划线的地方可以看看,其次需要讲的就是constrained这个属性:
http://blog.csdn.net/linminqin/article/details/6324567
有个地方需要提醒下,2个bean的主键字段类型必须一致,否则会抛出异常
6.(基于连接表)多对多
多了一个table属性 是建立用于连接2个表之间的对应关系属性,新表字段为bean类表的主键。其他没什么好讲的。
- Hibernate关系对映-表映射基于XML配置方式
- Hibernate关联关系映射-----基于连接表的单向多对多映射配置
- Hibernate关联关系配置-----基于连接表的双向一对多/多对一映射配置
- Hibernate 基于注解的方式 实现的关系映射案例(一对一关系,一对多关系,多对多关系)
- hibernate--Xml关系映射
- Hibernate关联关系映射-----单向多对一映射配置
- 4、Hibernate 实体关系映射(二、单边多对一关系 注解、xml两种方式)
- Hibernate关联关系映射-----基于连接表的单向一对多映射配置
- HIbernate 关系映射配置
- Hibernate映射关系配置
- hibernate关系映射配置
- Hibernate中,One2One映射关系的XML实现方式
- Hibernate中,One2Many映射关系的XML实现方式
- Hibernate中,Many2One映射关系的XML实现方式
- Hibernate关系配置之一对多映射配置
- Hibernate关系配置之多对多映射配置
- Hibernate关联关系配置-----基于连接表的双向一对一映射配置
- Hibernate学习笔记 3 - 关系映射配置(基于注解)
- 判断网站页面是否为伪静态
- iOS - 发短信 打电话 ,打开URL等
- 使用Nexus搭建Maven私服
- [Ubuntu][Linux]更改PATH路径
- 关于IntelliJ IDEA如何生成exe程序
- Hibernate关系对映-表映射基于XML配置方式
- SVG 形状元素(rect、circle、ellipse、line、polyline、polygon、path)
- 总结ThinkPHP导出数据到表格的几种方法及代码,分享给大家,注释超详细。
- /dev/shm不足导致执行root.sh报错Died at /u01/app/11.2.0/grid/crs/install/crsinstall.pm
- 解决zebra下ospf正常启动却无法建立邻居的问题
- nginx location笔记
- 遍历datatable的几种方法(C# )
- EL表达式
- Android中为什么主线程不会因为Looper.loop()方法造成阻塞