Hibernate 基本映射与组件映射

Hibernate 基本映射

一对一 

一个账户一个地址

Account             Address

主键表              外键表 [Address 对应的表中建一个外键]

独立主键:

One: Account

<one-to-one name=”addr” property-ref=”act” cascade=”all” />

主键表如何找到外键的一方呢?通过property-ref指定,

Many:Address

<many-to-one class=”act” column=”fid” cascade=”save-update”  unique=”true”/>

外键表如何找到与对方的关联呢?通过coulumn指定的外键与对方关联

 

共享主键:

One:Account  

<one-to-one name=”addr” cascade=”all” />

对应addr与对方进行关联,通过addr对应表的主键与对象关联

 

One:Address

//自身的主键来源于对方的主键

<generator calss=”foreign’>

         <param name=”perproty”>act</property>

</generator>

<one-to-one name=”act” constranted=”true” />

当前主键上存在一个约束,当前主键作为外键参照了对方的主键

在保存对象之前要先保存Account,如果不先保存Account,直接保存Address 会报:TransitentObjectException

Address 中的OID即是主键又是外键

 

一对多:

Usr                                                                                      Act

OID   Name  Set<Account>                                                              OID   actNo   balance  Usr usr

多的一方会采用Set集合表示对方的引用                          通过一个usr引用对方

 

数据库处理上,需要在多的一方加上一个外键,根据上面就是在 Act对应的表中加一个外键

Usr

<set name="actSet" cascade="all" inverse="true">

        <!--指定外键 -->

        <key column="fid"/>         //通过外键与多的一方进行关联

        <one-to-many class="Act" />   //指定集合元素中的类型

        </set>

Act

<!--多对一的关联  通过一个外键与对方关联 -->

        <many-to-one name="usr"

                  column="fid"

                  cascade="save-update"/>

 

多对多关联处理:

学生与课程之间是多对多的关联

Student                                                                                       Course

采用中间表的方式解决这样的关联关系

我们创建一个中间表来描述学生的选课情况.

Stu                                                                              Course

Oid Sid  name  Set<Course>                          Oid  Cid name Set<Stu>

T_Stu                                       T_stu_cour                 T_course  

 

Sid name oid               f1   f2                    Oid name cid

Stu

<set name="cours" table="lilp_stu_cour" cascade="save-update">

             <!--外键约束学生表的ID -->

             <key column="sfid"/>  //通过这个外键与Stu关联

             <!--外键约束课程表的ID --> //通过这个外键与课程关联

             <many-to-many class="Course" column="cfid" />

</set>

Course:

<set name="stus" table="lilp_stu_cour" cascade="save-update" inverse="true">

             <!--外键约束课程表的ID -->

             <key column="cfid"/>   //通过外键与课程关联

             <!--外键约束学生表的ID -->  //通过外键与学生关联

             <many-to-many class="Stu" column="sfid" />

</set>

组件关系映射

单一组件关联映射中,映射的都是单独的Pojo 之间的映射

比如:Act------------------Address

 

现在我们这样看:Address 属于地址  Act包含地址的信息

Act (整体)     Address (地址) [PO]

失去独立性的POJO 

Act                                                                             Address

Oid  actNo   bal Address                                        Oid zipcode  city street Act act

T_Act

Bal  actNo  oid                                                      oid zip city street {已经不是一个实体了,所以不必要写映射

                                                                                                                                            文件了}

一对一的组件关联映射

<component name="addr">   //添加组件属性

        <property name="zipcode"

                   column="ZIPCODE"/>

        <property name="city"

                   column="CITY"/>

        <property name="street"

                   column="STREET"/>

        </component>

 

一对多的组件关联映射

<set name="addrs" table="lilp_addr_comp">

        <!--lilp_addr_comp 表的外键,引用Account 表的主键 -->

        <key column="fid"/>         //组件对象会放在一线表中,通过外键与主对象进行关联

        <composite-element class="Address">

             <property name="zipcode"

                   column="ZIPCODE"/>

             <property name="city"

                   column="CITY"/>

             <property name="street"

                   column="STREET"/>

        </composite-element>

 </set>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值