版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、高级软件人才实作培训专家高级软件人才实作培训专家! ! IT资讯交流网 WWW.IT315.ORG HibernateHibernate映射组成关系映射组成关系 于于 洋洋 高级软件人才实作培训专家高级软件人才实作培训专家! ! IT资讯交流网 WWW.IT315.ORG 映射组成关系 高级软件人才实作培训专家高级软件人才实作培训专家! ! IT资讯交流网 WWW.IT315.ORG 映射组成关系 create table customer02( id int primary key, name varchar2(15), home_street varchar2(255), home_cit
2、y varchar2(255), home_province varchar2(255), home_zipcode varchar2(255), com_street varchar2(255), com_city varchar2(255), com_province varchar2(255), com_zipcode varchar2(255) ) 高级软件人才实作培训专家高级软件人才实作培训专家! ! IT资讯交流网 WWW.IT315.ORG 映射组成关系 映射文件 高级软件人才实作培训专家高级软件人才实作培训专家! ! IT资讯交流网 WWW.IT315.ORG 映射组成关系 p
3、ublic void insertCustomer() Session session=sessionFacoty.openSession(); Transaction tx=session.beginTransaction(); Customer c=new Customer(); c.setName(杨逍杨逍); Address homeAddress=new Address(临河街临河街,长春长春,吉林吉林,130000); Address comAddress=new Address(上帝五街上帝五街,海淀海淀,北京北京,120000); c.setHomeAddress(homeAd
4、dress); c.setComAddress(comAddress); session.save(c); mit(); session.close(); 知识点1:测试插入测试插入 高级软件人才实作培训专家高级软件人才实作培训专家! ! IT资讯交流网 WWW.IT315.ORG 映射组成关系 public void loadCustomer() Session session=sessionFacoty.openSession(); Transaction tx=session.beginTransaction(); Customer c=(Customer)session.load(Cu
5、stomer.class, 3); System.out.println(c.getName(); System.out.println(c.getHomeAddress().getCity()+ + +c.getHomeAddress().getProvince(); mit(); session.close(); 知识点2:测试查询测试查询 高级软件人才实作培训专家高级软件人才实作培训专家! ! IT资讯交流网 WWW.IT315.ORG 映射组成关系 public void updateCustomer() Session session=sessionFacoty.openSessio
6、n(); Transaction tx=session.beginTransaction(); Customer c=(Customer)session.load(Customer.class, 3); c.setName(xxx); c.getHomeAddress().setCity(四平四平); mit(); session.close(); 知识点3:测试更新测试更新 高级软件人才实作培训专家高级软件人才实作培训专家! ! IT资讯交流网 WWW.IT315.ORG 映射组成关系 知识点4:测试特殊的更新测试特殊的更新 public void updateCustomer() Sess
7、ion session=sessionFacoty.openSession(); Transaction tx=session.beginTransaction(); Customer c=(Customer)session.load(Customer.class, 3); /查询 c.setName(xxxccc); Address homeAddress=c.getHomeAddress(); if(homeAddress=null) System.out.println(homeAddress=null); homeAddress = new homeAddress(“沈阳”,”沈阳街”
8、,”132123”,”辽宁”); c.setHomeAddress(homeAddress);/添加 mit(); session.close(); 注:上面的代码会输出homeAddress=null,表明 查询的出来的家庭地址为null 要求:执行如下的update语句 UPDATE customers02 SET home_city=NULL, home_street=NULL, home_zipcode=NULL, home_province=NULL WHERE id=3 这时:home_city=NULL, home_street=NULL, home_zipcode=NULL,
9、home_province=NULL 高级软件人才实作培训专家高级软件人才实作培训专家! ! IT资讯交流网 WWW.IT315.ORG public void updateCustomer02() Session session=sessionFacoty.openSession(); Transaction tx=session.beginTransaction(); Customer c=(Customer)session.load(Customer.class, 3); c.setName(xxx); Address ha=c.getHomeAddress(); if(ha=null)
10、 /创建一个新的对象 ha=new Address(); /设置值 ha.setCity(beijing); /与客户建立关联 新的ha没有和客户关联 c.setHomeAddress(ha); mit(); session.close(); 映射组成关系 知识点4:测试特殊的更新测试特殊的更新 高级软件人才实作培训专家高级软件人才实作培训专家! ! IT资讯交流网 WWW.IT315.ORG 映射组成关系 lHibernate 把持久化类的属性分为两种: 值值(value)(value)类型类型: 没有没有 OID OID, 不能被单独持久化不能被单独持久化, 生命生命 周期依赖于所属的持久
11、化类的对象的生命周期周期依赖于所属的持久化类的对象的生命周期, ,组件类 型就是一种值类型 实体(entity)类型: 有 OID, 可以被单独持久化, 有独 立的生命周期 lHibernate使用 元素来映射组成关系, 该元素 表明homeAddress属性是Customer类一个组成部分, 在 Hibernate 中称之为组件组件 高级软件人才实作培训专家高级软件人才实作培训专家! ! IT资讯交流网 WWW.IT315.ORG HibernateHibernate映射继承关系映射继承关系 于于 洋洋 高级软件人才实作培训专家高级软件人才实作培训专家! ! IT资讯交流网 WWW.IT31
12、5.ORG 映射继承关系 Employee id name HourEmployee rate SalaryEmployee salary 高级软件人才实作培训专家高级软件人才实作培训专家! ! IT资讯交流网 WWW.IT315.ORG 映射继承关系 lHibernate支持三种继承映射策略: 每个具体类一张表(table per concrete class) 将域模型中的 每一个实体对象映射到一个独立的表中,也就是说不用在关系 数据模型中考虑域模型中的继承关系和多态。 每个类分层结构一张表(table per class hierarchy) 对于继 承关系中的子类使用同一个表,这就需要
13、在数据库表中增加额 外的区分子类类型的字段。 每个子类一张表(table per subclass) 域模型中的每个类映射 到一个表,通过关系数据模型中的外键来描述表之间的继承关 系。这也就相当于按照域模型的结构来建立数据库中的表,并 通过外键来建立表之间的继承关系。 高级软件人才实作培训专家高级软件人才实作培训专家! ! IT资讯交流网 WWW.IT315.ORG 采用 subclass 元素的继承映射 id:员工编号 etype:员工类型(he 小时工,se 正式员工, ee 员工) name:员工姓名 rate:小时工的工资 salary:正式员工的工资 父类和子类使用同一张表父类和子类
14、使用同一张表 pk 区分类型的字段 高级软件人才实作培训专家高级软件人才实作培训专家! ! IT资讯交流网 WWW.IT315.ORG 采用 subclass 元素的继承映射 l采用采用 subclass 的继承映射可以实现的继承映射可以实现对于继承关系中对于继承关系中父类和父类和 子类使用同一张表子类使用同一张表 l因为父类和子类的实例全部保存在同一个表中,因此需要在需要在 该表内增加一列该表内增加一列,使用该列来区分每行记录到底是哪个类的 实例-这个列被称为辨别者列(discriminatordiscriminator). l在这种映射策略下,使用使用 subclass subclass
15、来映射子类来映射子类,使用使用 class class 或或 subclass subclass 的的 discriminator-value discriminator-value 属性指定辨别属性指定辨别 者列的值者列的值 l所有子类定义的字段都不能有非空约束所有子类定义的字段都不能有非空约束。如果为那些字段添 加非空约束,那么父类的实例在那些列其实并没有值,这将 引起数据库完整性冲突,导致父类的实例无法保存到数据库 中 高级软件人才实作培训专家高级软件人才实作培训专家! ! IT资讯交流网 WWW.IT315.ORG 采用 subclass 元素的继承映射 高级软件人才实作培训专家高级软
16、件人才实作培训专家! ! IT资讯交流网 WWW.IT315.ORG 采用 subclass 元素的继承映射 知识点1: 保存员工信息 public void saveEmployee() Employee e=new Employee(); e.setName(xxxx); HourEmployee h=new HourEmployee(); h.setName(zhang); h.setRate(10d); SalaryEmployee s=new SalaryEmployee(); s.setName(wu); s.setSalary(1000d); session.save(e); s
17、ession.save(h); session.save(s); 高级软件人才实作培训专家高级软件人才实作培训专家! ! IT资讯交流网 WWW.IT315.ORG 采用 subclass 元素的继承映射 知识点2: 查询钟点工信息 public void findHourEmployee() Session session=sessionFacoty.openSession(); Transaction tx=session.beginTransaction(); Query query=session.createQuery(from HourEmployee); List list =
18、query.list(); for(int i=0;ilist.size();i+) HourEmployee h = list.get(i); System.out.println(h.getName()+” ”+h.getRate(); mit(); session.close(); 高级软件人才实作培训专家高级软件人才实作培训专家! ! IT资讯交流网 WWW.IT315.ORG 采用 joined-subclass 元素的继承映射 l关系树的每个类对应一个表 主表 id是主键 子表: eid是主键,同时又是 外键.参照主表的id 子表: eid是主键,同时又 是外键.参照主表的id表和
19、表之间存在主表和子表的概念 高级软件人才实作培训专家高级软件人才实作培训专家! ! IT资讯交流网 WWW.IT315.ORG 采用 joined-subclass 元素的继承映射 l采用 joined-subclass 元素的继承映射可以实现每个子类 一张表 l采用这种映射策略时,父类实例保存在父类表中,子类实 例由父类表和子类表共同存储。因为子类实例也是一个特 殊的父类实例,因此必然也包含了父类实例的属性。于是 将子类和父类共有的属性保存在父类表中,子类增加的属 性,则保存在子类表中。 l在这种映射策略下,无须使用鉴别者列,但需要为每个子 类使用 key 元素映射共有主键,该主键必须与父类
20、标识属 性的列名相同。但如果继承树的深度很深,可能查询一个 子类实例时,需要跨越多个表,因为子类的数据一次保存 在多个父类中。 l子类增加的属性可以添加非空约束。因为子类的属性和父 类的属性没有保存在同一个表中 高级软件人才实作培训专家高级软件人才实作培训专家! ! IT资讯交流网 WWW.IT315.ORG 采用 joined-subclass 元素的继承映射 高级软件人才实作培训专家高级软件人才实作培训专家! ! IT资讯交流网 WWW.IT315.ORG 采用 joined-subclass 元素的继承映射 知识点3: 保存员工信息 public void saveEmployee()
21、Employee e=new Employee(); e.setName(xxxx); HourEmployee h=new HourEmployee(); h.setName(zhang); h.setRate(10d); SalaryEmployee s=new SalaryEmployee(); s.setName(wu); s.setSalary(1000d); session.save(e); session.save(h); session.save(s); 高级软件人才实作培训专家高级软件人才实作培训专家! ! IT资讯交流网 WWW.IT315.ORG 采用 joined-su
22、bclass 元素的继承映射 知识点4: 查询钟点工信息 public void findHourEmployee() Session session=sessionFacoty.openSession(); Transaction tx=session.beginTransaction(); Query query=session.createQuery(from HourEmployee); List list = query.list(); for(int i=0;ilist.size();i+) HourEmployee h = list.get(i); System.out.prin
23、tln(h.getName()+” ”+h.getRate(); mit(); session.close(); 高级软件人才实作培训专家高级软件人才实作培训专家! ! IT资讯交流网 WWW.IT315.ORG 采用 joined-subclass 元素的继承映射 知识点5: 查询员工信息 public void findEmployee() Session session=sessionFacoty.openSession(); Transaction tx=session.beginTransaction(); Query query=session.createQuery(from E
24、mployee); List list = query.list(); for(int i=0;ilist.size();i+) Employee e = list.get(i); System.out.println(e.getName(); mit(); session.close(); 高级软件人才实作培训专家高级软件人才实作培训专家! ! IT资讯交流网 WWW.IT315.ORG 采用 joined-subclass 元素的继承映射 知识点6: 删除钟点工信息(不用使用级联) public void deleteEmployee() Session session=sessionFa
25、coty.openSession(); Transaction tx=session.beginTransaction(); Employee e=(Employee)session.load(Employee.class, 2); session.delete(e); mit(); session.close(); 同时钟点工对应表的数据同时被删除 高级软件人才实作培训专家高级软件人才实作培训专家! ! IT资讯交流网 WWW.IT315.ORG 采用 joined-subclass 元素的继承映射 知识点7:查询唯一的员工,不是钟点工也不是正式员工 sql语句的写法:SELECT * FR
26、OM e_emp e WHERE (e.id NOT IN(SELECT h.id FROM h_emp h) AND (e.id NOT IN(SELECT s.id FROM s_emp s) public void findOnlyEmployee() Session session=sessionFacoty.openSession(); Transaction tx=session.beginTransaction(); String hql=from Employee e “ where (e.id not in(select h.id from HourEmployee h) +
27、 and (e.id not in(select s.id from SalaryEmployee s) ; Query query=session.createQuery(hql); List list = query.list(); fro(var i=0;ilist.size();i+) Employee e = list.get(i); System.out.println(e.getName(); mit(); session.close(); 高级软件人才实作培训专家高级软件人才实作培训专家! ! IT资讯交流网 WWW.IT315.ORG 采用 union-subclass 元素的继承映射(了解知识) 关系树的每个类存放在各自独立的表中,没有主表和子表的概念,每个 表都有全部的自身信息,所有表和在一起后,记录仍然是唯一的所有表和在一起后,记录仍然是唯一的 hu_emp表 Id -pk su_emp表 Id -pk 表和表之间不存在主表和子表的概念 eu_emp表 Id -pk 高级软件人才实作培训专家高级软件人才实作培训专家! ! IT资讯交流网 WWW.IT315.ORG 采用 union-subclass 元素的继承映射(了解知识) l采用 union-subclas
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【文档】应急管理部18号令《安全生产违法行为行政处罚办法》重点解读
- 2024-2025学年反射疗法师3级经典例题重点附答案详解
- 证据支持下的护理实践
- 紧急项目进度通报回复函7篇范本
- 2024-2025学年公务员(省考)考前冲刺试卷(考点梳理)附答案详解
- 2024-2025学年云南交通职业技术学院电视播音主持期末考试考前冲刺试卷及参考答案详解(达标题)
- 2024-2025学年度执业兽医试题(夺分金卷)附答案详解
- 2024-2025学年度专升本试卷带答案详解(达标题)
- 2024-2025学年度收银审核员模拟试题【有一套】附答案详解
- 2024-2025学年度烟台汽车工程职业学院单招数学题库试题附参考答案详解【巩固】
- 2026年宁夏葡萄酒与防沙治沙职业技术学院自主公开招聘工作人员考试参考试题及答案解析
- 推动职业教育国际化-交流协会的探索与实践
- 2026中央台办所属事业单位招聘10人笔试备考试题及答案解析
- 2025年“安全生产月”《安全知识》培训考试题库及答案
- 公司薪酬管理制度公告模板(3篇)
- 2026浙江台州市港航事业发展中心招聘2人考试备考试题及答案解析
- 腹膜透析护理实践指南(2025年版)
- GB/T 1535-2026大豆油
- 2026年临汾职业技术学院单招职业倾向性考试题库含答案详解(完整版)
- 2026校招:远大物产集团试题及答案
- 康复中心考核制度
评论
0/150
提交评论