连云港网站开发公司,如东网站建设公司,WordPress博客页显示,网站建设免费空间哪里有第一种关联关系#xff1a;一对多#xff08;多对一#xff09; “一对多”是最普遍的映射关系#xff0c;简单来讲就如消费者与订单的关系。 一对多#xff1a;从消费者角的度来说一个消费者可以有多个订单#xff0c;即为一对多。 多对一#xff1a;从订单的角度来…第一种关联关系一对多多对一 “一对多”是最普遍的映射关系简单来讲就如消费者与订单的关系。 一对多从消费者角的度来说一个消费者可以有多个订单即为一对多。 多对一从订单的角度来说多个订单可以对应一个消费者即为多对一。
一对多关系在hbm文件中的配置信息 消费者一方
?xml version1.0 encodingutf-8?
!DOCTYPE hibernate-mapping PUBLIC -//Hibernate/Hibernate Mapping DTD 3.0//EN http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtdhibernate-mappingclass namecom.suxiaolei.hibernate.pojos.Customer tablecustomer!-- 主键设置 --id nameid typestringcolumn nameid/columngenerator classuuid/generator/id!-- 属性设置 --property nameusername columnusername typestring/propertyproperty namebalance columnbalance typeinteger/propertyset nameorders inversetrue cascadeallkey columncustomer_id /keyone-to-many classcom.suxiaolei.hibernate.pojos.Order//set/class/hibernate-mapping
订单多方
?xml version1.0 encodingutf-8?
!DOCTYPE hibernate-mapping PUBLIC -//Hibernate/Hibernate Mapping DTD 3.0//EN http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtdhibernate-mappingclass namecom.suxiaolei.hibernate.pojos.Order tableordersid nameid typestringcolumn nameid/columngenerator classuuid/generator/idproperty nameorderNumber columnorderNumber typestring/propertyproperty namecost columncost typeinteger/propertymany-to-one namecustomer classcom.suxiaolei.hibernate.pojos.Customer columncustomer_id cascadesave-update/many-to-one /class/hibernate-mapping “一对多”关联关系Customer方对应多个Order方所以Customer包含一个集合用于存储多个OrderOrder包含一个Customer用于储存关联自己的Customer。 一对多关联关系有一种特例自身一对多关联。例如
自身一对多关联自身的hbm文件设置
?xml version1.0 encodingutf-8?
!DOCTYPE hibernate-mapping PUBLIC -//Hibernate/Hibernate Mapping DTD 3.0//EN http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtdhibernate-mappingclass namecom.suxiaolei.hibernate.pojos.Category tablecategoryid nameid typestringcolumn nameid/columngenerator classuuid/generator/idproperty namename columnname typestring/propertyset namechidrenCategories cascadeall inversetruekey columncategory_id/keyone-to-many classcom.suxiaolei.hibernate.pojos.Category//setmany-to-one nameparentCategory classcom.suxiaolei.hibernate.pojos.Category columncategory_id/many-to-one/class/hibernate-mapping
外键存放父亲的主键。
第二种关联关系多对多 多对多关系也很常见例如学生与选修课之间的关系一个学生可以选择多门选修课而每个选修课又可以被多名学生选择。数据库中的多对多关联关系一般需采用中间表的方式处理将多对多转化为两个一对多。 数据表间多对多关系如下图
多对多关系在hbm文件中的配置信息 学生
?xml version1.0 encodingutf-8?
!DOCTYPE hibernate-mapping PUBLIC -//Hibernate/Hibernate Mapping DTD 3.0//EN http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd
hibernate-mappingclass namecom.suxiaolei.hibernate.pojos.Student tablestudentid nameid typeintegercolumn nameid/columngenerator classincrement/generator/idproperty namename columnname typestring/propertyset namecourses inversefalse cascadesave-update tablestudent_coursekey columnstudent_id/keymany-to-many classcom.suxiaolei.hibernate.pojos.Coursecolumncourse_id/many-to-many/set/class
/hibernate-mapping
课程
?xml version1.0 encodingutf-8?
!DOCTYPE hibernate-mapping PUBLIC -//Hibernate/Hibernate Mapping DTD 3.0//EN http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd
hibernate-mappingclass namecom.suxiaolei.hibernate.pojos.Course tablecourseid nameid typeintegercolumn nameid/columngenerator classincrement/generator/idproperty namename columnname typestring/propertyset namestudents inversetrue cascadesave-update tablestudent_coursekey columncourse_id/keymany-to-many classcom.suxiaolei.hibernate.pojos.Studentcolumnstudent_id/many-to-many/set/class
/hibernate-mapping 其实多对多就是两个一对多它的配置没什么新奇的相对于一对多。在多对多的关系设计中一般都会使用一个中间表将他们拆分成两个一对多。标签中的”table”属性就是用于指定中间表的。中间表一般包含两个表的主键值该表用于存储两表之间的关系。由于被拆成了两个一对多中间表是多方它是使用外键关联的是用于指定外键的用于从中间表取出相应的数据。中间表每一行数据只包含了两个关系表的主键要获取与自己关联的对象集合还需要取出由外键所获得的记录中的另一个主键值由它到对应的表中取出数据填充到集合中。中的”column”属性是用于指定按那一列的值获取对应的数据。 例如用course表来说它与student表使用一个中间表student_course关联。如果要获取course记录对应的学生记录首先需要使用外键”course_id”从student_course表中取得相应的数据然后在取得的数据中使用”student_id”列的值在student表中检索出相关的student数据。其实为了便于理解你可以在使用course表的使用就把中间表看成是student表反之亦然。这样就可以使用一对多的思维来理解了多方关联一方需要外键那么在本例子中就需要”course_id”来关。
第三种关联关系一对一 一对一关系就球队与球队所在地之间的关系一支球队仅有一个地址而一个地区也仅有一支球队貌似有点勉强将就下吧。数据表间一对一关系的表现有两种一种是外键关联一种是主键关联。图示如下 一对一外键关联
一对一主键关联要求两个表的主键必须完全一致通过两个表的主键建立关联关系
一对一外键关联在hbm文件中的配置信息 地址
?xml version1.0 encodingutf-8?
!DOCTYPE hibernate-mapping PUBLIC -//Hibernate/Hibernate Mapping DTD 3.0//EN http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd
hibernate-mappingclass namecom.suxiaolei.hibernate.pojos.Adress tableadressid nameid typeintegercolumn nameid/columngenerator classincrement/generator/idproperty namecity columncity typestring/propertyone-to-one nameteam classcom.suxiaolei.hibernate.pojos.Team cascadeall/one-to-one/class
/hibernate-mapping
球队
?xml version1.0 encodingutf-8?
!DOCTYPE hibernate-mapping PUBLIC -//Hibernate/Hibernate Mapping DTD 3.0//EN http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd
hibernate-mappingclass namecom.suxiaolei.hibernate.pojos.Team tableteamid nameid typeintegercolumn nameid/columngenerator classincrement/generator/idproperty namename columnname typestring/propertymany-to-one nameadress classcom.suxiaolei.hibernate.pojos.Adress columnadress_id uniquetrue/many-to-one/class
/hibernate-mapping 一对一外键关联其实可以看做是一对多的一种特殊形式多方退化成一。多方退化成一只需要在标签中设置”unique””true”。 一对一主键关联在hbm文件中的配置信息 地址
hibernate-mappingclass namecom.suxiaolei.hibernate.pojos.Adress tableadressid nameid typeintegercolumn nameid/columngenerator classincrement/generator/idproperty namecity columncity typestring/propertyone-to-one nameteam classcom.suxiaolei.hibernate.pojos.Team cascadeall/one-to-one/class
/hibernate-mapping
球队
hibernate-mappingclass namecom.suxiaolei.hibernate.pojos.Team tableteamid nameid typeintegercolumn nameid/columngenerator classforeignparam namepropertyadress/param/generator/idproperty namename columnname typestring/propertyone-to-one nameadress classcom.suxiaolei.hibernate.pojos.Adress cascadeall/one-to-one/class
/hibernate-mapping
一对一主键关联是让两张的主键值一样。要使两表的主键相同只能一张表生成主键另一张表参考主键。
generator classforeignparam namepropertyadress/param
/generator
“class””foreign”就是设置team表的主键参照adress属性的主键值。