关联关系

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Hibernate关联映射回顾Hibernate的基本原理?Hibernate的优势?使用Hibernate操作数据库的步骤?实体对象的三种状态?教学目标掌握many-to-one关联掌握one-to-many关联掌握many-to-many关联实体关联关系实体之间的关系关联关系通过一个对象持有另一个对象的实例泛化关系通过对象之间的继承方法来实现类与类之间最普遍的关系就是关联关系在UML语言中,关联是有方向的单向多对一关联在类与类之间各种各样的关系中,多对一的单向关联关系和关系数据库中的外键参照关系最匹配单向多对一关联是最常见的单向关联关系在租房系统中从街道到区的关联就是典型的多对一关联租房系统中街道和区的实体类publicclassDistrictimplementsjava.io.Serializable{privateIntegerid;privateStringname;/**默认的构造方法*/publicDistrict(){}//省略setter/getter方法}区publicclassStreetimplementsjava.io.Serializable{privateIntegerid;privateDistrictdistrict;privateStringname;/**默认的构造方法*/publicStreet(){}publicDistrictgetDistrict(){returnthis.district;}publicvoidsetDistrict(Districtdistrict){this.district=district;}//省略部分setter/getter方法}街道租房系统中街道和区的映射文件hibernate-mappingclassname=bean.Districttable=districtidname=idtype=java.lang.Integercolumnname=id/generatorclass=“identity//idpropertyname=nametype=java.lang.Stringcolumnname=namelength=50not-null=true//property/class/hibernate-mappingDistrict.hbm.xmlhibernate-mappingclassname=bean.Streettable=street”idname=idtype=java.lang.Integercolumnname=id/generatorclass=“identity//idmany-to-onename=districtclass=bean.Districtcolumnname=district_id//many-to-onepropertyname=nametype=java.lang.Stringcolumnname=street_namelength=50not-null=true//property/class/hibernate-mappingStreet.hbm.xml与Street对应的street表是通过district_id的值关联至district表的设置关系的字段设置关系的对象many-to-one元素常用属性many-to-one元素的常用属性属性含义和作用必须默认值name映射类属性的名称Yclass关联类的完全限定名Ncolumn关联的字段Nnot-null设置关联的字段的值是否可以为空Nfalselazy指定关联对象是否使用延迟加载以及延迟加载的策略Nproxyfetch设置抓取数据的策略Nselect配置映射文件并测试hibernate.cfg.xml中指定映射文件测试hibernate-configuration!--省略其他配置--mappingresource=cn/jbit/houserent/bean/District.hbm.xml/mappingresource=cn/jbit/houserent/bean/Street.hbm.xml//hibernate-configurationDistrictdistrict=newDistrict();Streetstreet1=newStreet();Streetstreet2=newStreet();Streetstreet3=newStreet();district.setName(丰台);//设置区的名称street1.setName(广安路);//设置街道名称street1.setDistrict(district);//设置街道所在区street2.setName(大红门路);street2.setDistrict(district);street3.setName(南苑路);street3.setDistrict(district);设置街道和区SessionFactorysessionFactory=null;Sessionsession=null;Transactiontx=null;try{sessionFactory=newConfiguration().configure().buildSessionFactory();session=sessionFactory.openSession();tx=session.beginTransaction();session.save(district);session.save(street1);session.save(street2);session.save(street3);tx.commit();}catch(HibernateExceptione){tx.rollback();e.printStackTrace();}finally{session.close();sessionFactory.close();}添加街道和区单向一对多关联由“一”的一端加载“多”的一端,关系由“一”的一端来维护在JavaBean中是在“一”的一端中持有“多”的一端的集合Hibernate把这种关系反映到数据库的策略是在“多”的一端的表上加一个外键指向“一”的一端的表在“一”的一端维护关系是不提倡的将“多”的一端的外键添加非空约束,导致数据不能插入插入数据效率降低实体类publicclassStreetimplementsjava.io.Serializable{privateIntegerid;privateIntegerdistrict_id;privateStringname;/**默认的构造方法*/publicStreet(){}//省略部分setter/getter方法publicIntegergetDistrict_id(){returndistrict_id;}publicvoidsetDistrict_id(Integerdistrict_id){this.district_id=district_id;}}街道实体类publicclassDistrictimplementsjava.io.Serializable{privateIntegerid;privateStringname;privateSetstreets=newHashSet();/**默认的构造方法*/publicDistrict(){}//省略部分setter/getter方法publicSetgetStreets(){returnthis.streets;}publicvoidsetStreets(Setstreets){this.streets=streets;}}区实体类映射文件hibernate-mappingclassname=cn.jbit.houserent.bean.Streettable=streetidname=idtype=java.lang.Longcolumnname=id/generatorclass=native//idpropertyname=nametype=java.lang.Stringcolumnname=namelength=50not-null=true//propertypropertyname=district_idtype=java.lang.Longcolumnname=district_id//property/class/hibernate-mappingStreet.hbm.xmlhibernate-mappingclassname=“bean.Districttable=districtidname=idtype=java.lang.Integercolumnname=id/generatorclass=native//idpropertyname=nametype=java.lang.Stringcolumnname=namelength=50not-null=true//propertysetname=streetstable=street“keycolumnname=district_id//keyone-to-manyclass=“bean.Street//set/class/hibernate-mappingDistrict.hbm.xml设置关系的字段设置关系的对象使用set元素和one-to-many元素配置一对多关联使用set元素和one-to-many元素配置一对多关联set元素的常用属性set元素的常用属性属性含义和作用必须默认值name映射类属性的名称Ytable关联类的目标数据库表Nlazy指定关联对象是否使用延迟加载以及延迟加载的策略Nproxyfetch设置抓取数据的策略Nselect修改测试类检查结果hibernate.cfg.xml中指定映射文件测试hibernate-configuration!--省略其他配置--mappingresource=cn/jbit/houserent/bean/District.hbm.xml/mappingresource=cn/jbit/houserent/bean/Street.hbm.xml//hibernate-configurationDistrictdistrict=newDistrict();Streetstreet1=newStreet();Streetstreet2=newStreet();Streetstreet3=newStreet();district.setName(海淀);street1.setName(中关村大街);street2.setName(知春路);street3.setName(学院路);district.getStreets().add(street1);district.getStreets().add(street2);district.getStreets().add(street3);设置街道和区SessionFactorysessionFactory=null;Sessionsession=null;Transactiontx=null;try{sessionFactory=newConfiguration().configure().buildSessionFactory();session=sessionFactory.openSession();tx=session.beginTransaction();session.save(street1);session.save(st

1 / 23
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功