已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Hibernate实体映射 q 映射对象标识符 q 映射字段类型 q 映射关联关系 本章目标 自然主键 q在关系数据库表中,主键用来标识记录并保证每 条记录唯一性,主键字段必须满足以下条件 q不允许有null q每条记录具有唯一的主键值 q每条记录的主键值永远不变 q把数据库表中具有业务含义的主键字段称为自然 主键,比如: q用户名 q身份证号码 q订单编号 代理主键 q自然主键不能满足不断变化的业务需求,一旦业 务需求变化,就必须修改数据模型重新定义表的 主键,给数据库的维护增加了难度 q因此,在数据库设计时引入了代理主键,代理主 键不具备任何的业务含义,一般为整数,因为整 数比字符串节省存储空间: qSQL Server和My SQL中的自动增长类型 qOracle和DB2中的序列(Sequence) Hibernate几种内置的标识符生成器 q Hibernate内置标识符 q increment:由Hibernate负责主键递增(查询最大id值之后加1, 要多查询一次数据库,并且并发访问会出错) q identity:采用数据库自增主键生成机制,如SQL Server、My SQL,但是Oracle等不支持 q sequence:采用数据库提供的sequence生成机制,如Oracle 、 DB2,但是SQL Server、My SQL不支持 q hilo:需要额外数据库表保存主键生成历史状态 q uuid:由hibernate基于唯一值算法生成表示一个 128 位的值(32个 字符),最大的保证唯一性,可能数万年才出现一次重复,可以在 不同数据库之间移植 q native:由hibernate自动判断数据库类型而采用不同的生成机制 ,选择使用identity,sequence,hilo标识生成器 q assigned:由应用程序负责生成主键,不能把setId()的方法设置 成private q 如果把设置为validate,对于 native和sequence需要先建一个名为HIBERNATE_SEQUENCE 的Sequence(Oracle) UUID q UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机 器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。按 照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳 秒级时间、芯片ID码和许多可能的数字。由以下几部分的组合:当前 日期和时间(UUID的第一个部分与时间有关,如果你在生成一个UUID 之后,过几秒又生成一个UUID,则第一个部分不同,其余相同),时 钟序列,全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没 有网卡以其他方式获得),UUID的唯一缺陷在于生成的结果串会比 较长。 q 在Java中生成UUID的方式(java.util.UUID类) qString uuid = UUID.randomUUID().toString(); class元素的配置 q name:POJO实体类名 q table:映射的表名,如果省略,默认和实体类名一致 q dynamic-insert:true/false,如果为true,根据实体类的值,生成SQL ,如果实体类中有空字段,相应的字段不生成insert语句中 q dynamic-update: true/false,如果为true,根据实体类的值,生成 SQL,如果实体类中有空字段,相应的字段不生成update语句中 q lazy :是否延迟加载,true为延迟加载,false为立即加载,默认为 true id元素的配置 q name:POJO实体类属性名,以小写字母开头 q column:对应数据库的字段名,如果省略,默认为实体类的属性名 q type:映射类型,可选 q Hibernate基本类型:integer,float,string,character,timestamp,date等 q Java基本类型:int,float,char,java.lang.String,java.util.Date等 q 自定义类的类名 q access:可选,默认为property,表示Hibernate通过setXXX和 getXXX方法来访问实体类属性,如果设置为field,表示直接访问实体 类的属性 property元素的配置 q name:POJO实体类属性名,以小写字母开头 q column:对应数据库的字段名,如果省略,默认为实体类的属性名 q type:映射类型,可选 q Hibernate基本类型:integer,float,string,character,timestamp,date等 q Java基本类型:int,float,char,java.lang.String,java.util.Date等 q 自定义类的类名 q update:true/false,表明insert的SQL语句中是否包含这个字段 q Insert : true/false,表明update的SQL语句中是否包含这个字段 q access:可选,默认为property,表示Hibernate通过setXXX和 getXXX方法来访问实体类属性,如果设置为field,表示直接访问实体 类的属性 q unique:为该字段添加唯一约束 q not-null:该字段是否可以为空 映射多对一单向关联 q 多对一关联关系:以客户(Customer)和订单(Order) 为例,一个客户 可以有多个订单,反过来一个订单只能属于一个客户,从订单这一边 来看就是多对一关联关系 q 多对一的关联关系用POJO映射文件中的子元素来进行配置 q 首先要在Order类中建一个类型为Customer的私有属性,意为每个订 单都会属于某一个客户 q 接着需要进行多对一的映射配置() q 必须是在多的一方进行配置,以上例也就是必须在订 单(Order)的映射文件Order.hbm.xml中进行配置 many-to-one元素的配置 q name:设定待映射持久化类的属性名,此属性的类型应该是关联的 另一个持久化类 q column:设定和持久化类的属性对应的外键字段 q class:设定name所定义的属性的类型 q cascade:用于指定如何操作与当前对象关联的其他对象 q none:保存、更新或删除对象时,忽略其他关联对象,默认值 q save-update:通过save(),update()以及saveOrUpdate()方法保存或更 新当前对象时,级联保存和更新关联对象 q delete:通过delete()方法删除当前对象时,级联删除关联对象 q all:包含save-update和delete行为。此外,对当前对象执行evict()或 lock()操作时,也会对关联对象执行相同操作 q delete-orphan:删除所有和当前对象解除关联关系的对象 q all-delete-orphan:包含all和delete-orphan的行为 q lazy:是否延迟加载, q false为立即加载 q proxy为延迟加载,默认为proxy q not-null:该字段是否可以为空 q unique:为该字段添加唯一约束 q update:true/false,表明insert的SQL语句中是否包含这个字段 q Insert : true/false,表明update的SQL语句中是否包含这个字段 映射一对多单向关联 1 q 一对多关联关系:以客户(Customer)和订单(Order)为例,一个客户可 以有多个订单,反过来一个订单只能属于一个客户,从客户这一边来 看就是一对多关联关系 q 一对多的关联关系用POJO映射文件中的子元素来进行 配置 q 首先要在Customer类中建一个类型为Set的私有集合属性orders,意 为每个客户拥有的订单列表 q 接着需要进行一对多的映射配置() q 注:在工程中同时映射两个单向关联时,需要将外键字段的not null 设置去除 映射一对多单向关联 2 q 必须是在一的一方进行配置,以上例也就是必须在客户 (Customer)的映射文件Customer.hbm.xml中进行配置 set元素的配置 q name:待持久化类属性名,以小写字母开头 q cascade:save-update,级联保存和更新 q lazy:是否延迟加载,true为延迟,false为不延迟 q inverse:由谁来维护关联关系,双向关联时应设为true,表明由被关 联的一方维护关联关系 q 注:inverse属性只有在双向关联时才能去维护 q q column:外键字段名 q q class:集合中存放的对象类型 映射一对多双向关联 1 q 一对多关联关系:以客户(Customer)和订单(Order)为例,一个客户可 以有多个订单,反过来一个订单只能属于一个客户,如果同时从一的 一方和多的一方映射就是一对多双向关联关系 q 一对多的双向关联关系需要在Custmoer类的映射文件中的子 元素来进行配置一对多的关联,还需要在Order类的映射文件中 的子元素来进行配置多对一的关联 q 首先要在Customer类中建一个类型为Set的私有集合属性orders,意 为每个客户拥有的订单列表,还要在Order类中建一个类型为 Customer的私有属性,意为每个订单都会属于某一个客户 q 接着需要进行一对多的映射配置() 映射一对多双向关联 2 q 还需要进行多对一的映射配置() q 必须是在多的一方进行配置,也就是必须在订单 (Order)的映射文件Order.hbm.xml中进行配置 注意:配置一对多的双向关联时不需要设置not-null=“true”属性 映射一对多双向自身关联 1 q 一对多双向自身关联关系:以雇员(Employee) 为例,一个雇员可以 有多个下属,反过来一个雇员只能有一个上级,这就是一对多双向自 身关联关系 q 一对多的双向自身关联关系需要在映射文件中同时配置子元素和子元素 q 首先要在Employee类中建一个类型为Employee的私有属性mgr,意 为每个雇员都有一个上级(也可以没有上级);还需要在类中建一个类 型为Set的underling的属性,意为一个雇员可以有多个下属 q 接着需要在Employee.hbm.xml中同时进行 和的 映射配置 映射一对多双向自身关联 2 映射一对一关联 q 一对一关联关系:以人(Person)和护照(Passport)为例, 一个人只能有一个护照,反过来一个护照也只能属于一个 人,这就是一对一关联关系 q 一对一的关联关系在映射文件中用的子元素来进行配置 q 一对一的关联关系包括如下两种类型 q 主键关联 q 唯一外键关联 映射一对一主键关联 q 首先创建POJO类Person和Passport,两者相互持有对方的引用 q 其中Passport类的主键又作为外键参照Person的主键值 q 在Person.hbm.xml中元素下配置如下 q 在Passport.hbm.xml中元素下配置如下 person id元素在one-to-one中的配置 qname:POJO类对象的标识符,通常为主键属性 名 qclass:对应数据库表字段名 q:为持久化类实例生成唯一标识 qclass:foreign,代表使用另一个相关联对象的标识符 q:生成器实例需要的配置值和初始化参数 qname:property,代表引用的是一个属性 qvalue:代表对象的引用名 q和起来意为生成的主键需要引用哪个对象上的属性,属性的名 称就是id元素的name的所用的属性名 one-to-one元素的配置 q name:一对一映射另一方的类对象的属性名 q class:一对一映射另一方的属性的类型 q cascade:all,级联保存、更新和删除(在主控方配置) q constrained:true,表的主键同时作为外键参照关联的另一方的主键( 在被控方配置) 映射一对一外键关联 q 以Classes(班)和Monitor(班长)为例,MONITOR表中定义 一个外键,参照CLASSES表的主键,对于一个班来说只 有一个班长,而一个班长也只能属于一个班 q 一个班有多个学员,班长只是班中学员的一个特例,因此 在Monitor.hbm.xml文件中用元素做映射, 只是需要多加一个唯一约束 q 在Classes.hbm.xml文件中用元素做映射 |-表明建立从classes到Monitor对象的关联 映射多对多关联 q 以Teacher(教师)和Student(学生)为例,一个教师可以有多个学生, 而一个学生也可以有多个教师,这就是多对多的关联关系 q 需要在Teacher中定义Student的集合属性,在Student中定义Teacher 的集合属性 q 在映射文件中用元素进行映射 Student.hbm.xml Teacher.hbm.xml 映射复合主键 q复合主键:指有多个字段同时做为主键 q在Hibernate中,通过的子元素 元素对复合主键进行定义(此元素 和元素不能同时存在) q对于复合主键而言,有两种映射方式: q基于实体类属性的复合主键:复合主键由实体类中的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 天猫过户合同
- 密室工程合同
- Flexsim中级课件d100706教学提纲
- 猪场消纳协议书
- 监控服务协议书
- 被狗咬伤赔偿协议书
- 建行协议书存款利率
- 股东之间协议书范本
- 酒店购销协议合同范本
- 吊篮施工安全协议书
- 产教融合机制课题申报书
- 腹部常规B超课件
- 2024年下半年 软件设计师 上午试卷
- 部队有线通信维护课件
- 华电考试专业题库及答案
- 《新医学大学英语视听说教程1》参考答案汇 -U1-U6
- 2025年中国电信集团招聘考试试题及答案全收录
- 2025新外研社版七年级上英语单词汉译英默写表(开学版)
- 重庆住房公积金培训课件
- 2025陕西寰宇正信科技产业发展有限公司招聘(71人)笔试备考试题及答案解析
- 2025年入团知识考试题库(含答案)
评论
0/150
提交评论