hibernate_02_多对多_多对一_关联查询_第1页
hibernate_02_多对多_多对一_关联查询_第2页
hibernate_02_多对多_多对一_关联查询_第3页
hibernate_02_多对多_多对一_关联查询_第4页
hibernate_02_多对多_多对一_关联查询_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Hibernate目录:l自动到手配置一个hibernate环境l表与表之间的关系l 1对1,多对1/1对多,多对多。l bag,list,setl 级联- cascade,inversl HQL语句再说明 from SomeClassl 关联查询 条件查询l在关联查询与直接将数据封装成map,JavaBean或是直接返回object.l 使用定义的SqL在xml中定义。l 使用原生的sql。表与表之间的关系l1对1. 一个表的主键对应另一个表的主键。l1对多,多对1. 一个表的主键对应另一个表的外键。l多对多。使用第三方表完成多对多。1对多的最简单实现:外表只有一个列-简单映射l一个项目可以

2、拥有多张图片。l/*最简单的set影射,一个项目有多张图片*/lcreate table item(l item_id int primary key,l item_name varchar(30)l);lcreate table image(l image_id int,l image_name varchar(30)l);1对多的最简单实现:外表只有一个列实现具体操作:保存/查询:l保存l查询使用注解实现的简单的一对多:复杂的一对多实现,每张表一个实例Bean:1对多,多对1关联:l一个人可以拥有多辆汽车。在Person方,使用set进行关联:/以下是多方:在Car方为many-to-on

3、e,fetch写在哪边就影响从这一边到另一边的查询 /指定本类所对应的表中的外键字段名 inverse将此值修改成false或是直接删除此配置项目-后面讲-说明是否放弃维护表关系true时将放弃,即不会自动关联id 多方,即明细方的外键字段名 /在person方为one-to-many 代码:修改配置文件如下:直接使用级联保存:inverse:是否要放弃维护表之间的关系。false是不放弃,即维护表之间的关系。级联和关系维护 lCasade用来说明当对主对象进行某种操作时是否对其关联的从对象也作类似的操作,常用的cascade:none,all,save-update ,delete, loc

4、k,refresh,evict,replicate,persist,merge,delete-orphan(one-to-many) 。一般对many-to-one,many-to-many不设置级联,在和中设置级联。linverse表“是否放弃维护关联关系是否放弃维护关联关系”(在Java里两个对象产生关联时,对数据库表的影响),在one-to-many和many-to-many的集合定义中使用,inverse=”true”表示该对象不维护关联关系;该属性的值一般在使用有序集合时设置成false(注意hibernate的缺省值是false)。one-to-many维护关联关系就是更新外键。m

5、any-to-many维护关联关系就是在中间表增减记录。注: 配置成one-to-one的对象不维护关联关系使用带关联的查询1:l即可以从Person查询出他的所有汽车,也可以从某个car中获取l它的主人信息。l但这种方式可以通过设置lazy=true|false的方式来加以限制。任何l方便的操作,都是以消耗性能为代价的。l从一个对象中获取关系的另一方信息使用带关联的查询2:l查询拥有车号为888的车主查询谁拥有什么车使用带关联的查询3:将查询结果直接封装成Map:使用带关联的查询4:使用Criteira的createAlias方法l以上代码返回的数据形式仍然为List类型。l但如果某个Per

6、son拥有两部车,则会出现重复的Person使用带关联的查询5:高级查询也可以使用以下查询,代替上面的查询:使用List关联另一方:l再很多情况下,我们已经习惯使用List进行数据操作,这在Hibernate的只需要的简单的修改,即可以实现:声明成List,并使用bag进行影射:l具体操作略。用注解实现的一对多:l主表l外表动态模型(Dynamic models)l运行期的持久化实体没有必要一定表示为像 POJO 类或 JavaBean 对象那样的形式。Hibernate 也支持动态模型 (在运行期使用 Map 的 Map)和象 DOM4J 的树模型那样的实体表示。使用这种方法,你不用写持久化

7、类,只写映射文件就行了。 动态模型组件的配置/查询:使用Map保存动态模型:1对1关系:l1对1影射关系,一般情况非常少见。1对1中,一般为一个表的主键对应另一个表的主键或是对应另一个表的unique列。基于主键的一对一。基于主键对唯一键的一对一。1对1关系:-基于主键对主键的一对一lDROP TABLE human;lCREATE TABLE human(l id INT PRIMARY KEY,l NAME VARCHAR(20)l);lDROP TABLE idCard;lCREATE TABLE idCard(l id INT PRIMARY KEY,l NAME VARCHAR(20

8、),l addr VARCHAR(50)l);lALTER TABLE idCardl ADD CONSTRAINT idCard_fk FOREIGN KEY (id) REFERENCES human(id);1对1的配置文件:-基于主键对主键的一对一:基于主键的一对一:保存/查询l保存l查询l使用HQL查询:基于注解的1对1:主键对主键测试代码:查询,通过一个对像查询出另一个对像:1对1关联的另一种方式: - 基于主键对唯一的一对一:l2)基于外健的one-to-one,可以描述为多对一,加unique=“true”约束ll配置文件:主键对唯一增加操作:使用注解实现的一对一:主键对唯一键

9、l主关联映射使用中间表进行关联影射:在操作和性能方面都不太理想,所以多对多的映射使用较少,实际使用中最好转换成一对多的对象模型;Hibernate会为我们创建中间关联表,转换成两个一对多。 单向关联从Teacher到Student(必须手工完成)配置文件:多对多关联让关联工作:保存:多对多查询:l以下查询出,某些老师带哪些学生。使用注解实现的多对多:l核心问题:ManyToManyCascadeJoinColumn其他关系:组件映射:-通常使用组件映射来表达一些依赖关系关联的属性是个复杂类型的持久化类,但不是实体即:数据库中没有表与该属性对应,但该类的属性要之久保存的。当组件的属性不能和表中的

10、字段简单对应的时候可以选择实现:org.hibernate.usertype. UserType或org.hibernate.usertype. CompositeUserType 组件映射-示例使用其他影射简单了解:l除了前面在多对1时使用Set,和Bag之外,还可以使用List或是Map来影射,但List和map必须指定额外的值,如List要指定下标,map要指定Key.-在真实的开发中,很少使用List和map.l另有一种集合是Array.就不做介绍了。使用List进行影射:注意区分List与Bag的区别:使用注解完成-List的1对多: 使用map进行影射需要指定key值:选择合适的集

11、合影射你的类:l建议使用set.l建议使用bag.其他关系:继承-使用一张表:此种情况用的不是很多,一般用于在一张表中通过父子类来表达父子关系。其他影射继承每个子类一张表:用此种方式用的非常少见下面的备注部分。级联和关系维护的再讨论 lCasade用来说明当对主对象进行某种操作时是否对其关联的从对象也作类似的操作,常用的cascade:none,all,save-update ,delete, lock,refresh,evict,replicate,persist,merge,delete-orphan(one-to-many) 。一般对many-to-one,many-to-many不设置

12、级联,在和中设置级联。linverse表“是否放弃维护关联关系是否放弃维护关联关系”(在Java里两个对象产生关联时,对数据库表的影响),在one-to-many和many-to-many的集合定义中使用,inverse=”true”表示该对象不维护关联关系;该属性的值一般在使用有序集合时设置成false(注意hibernate的缺省值是false)。one-to-many维护关联关系就是更新外键。many-to-many维护关联关系就是在中间表增减记录。注: 配置成one-to-one的对象不维护关联关系cascade经常使用的值说明:l all : 所有情况下均进行关联操作。l none:所有情况下均不进行关联操作。这是默认值。l save-update:在执行save/update/saveOrUpdate时进行关联操ldelete:在执行delete时进行关联操作.ldelete-orphan: 当save/update/saveOrUpdate时,相当于save-update ;当删除操作时,相当于delete ;,即相

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论