Hibernate知识辅导(2--3)

常用的是共享主键策略来完成一对一关系的映射

 

User类的映射文件User.hbm.xml

 

<hibernate-mapping package="alan.hbn.rel.o2o">

     <class name="User" table="user_o2o_pk">

         <id name="userId" column="userid">

              <generator class="identity"/>

            <!--标明主键采取自增列方式生成-->

         </id>

         <property name="userName" column="username"/>

         <one-to-one name="address" class="Address" cascade="all"/>

         <!--

标明一对一的关系在本类中的另一类的属性和类型,以及级连操作的范围

name属性标明User类中的Address类的对象名,class标明其类型

-->

    </class>

</hibernate-mapping>

 

Address类的映射文件Address.hbm.xml

 

<hibernate-mapping package="alan.hbn.rel.o2o">

     <class name="Address" table="address_o2o_pk">

         <id name="addressId" column="addressid">

              <generator  class="foreign">

                   <!--标明主键采用共享主键策略-->

                 <param name="property">user</param>

                   <!--标明是引用自那个关联类的主键-->

           </generator>

         </id>

         <property name="street" column="street"/>

         <property name="zipcode" column="zipcode"/>

         <one-to-one name="user" class="User" constrained="true"/>

          <!--

标明一对一的关系在本类中的另一类的属性和类型,以及级连操作的范围

name属性标明Address类中的User类的对象名,class标明其类型,

constrained的属性关联是采取外键引用并作为主键,在采取共享主键时,

<generator  class="foreign"><one-to-one ....constrained="true">

是同时存在的

-->

</class>

</hibernate-mapping>

 

外键策略来完成一对一关系的映射

 

User类的映射文件User.hbm.xml

 

<hibernate-mapping package="alan.hbn.rel.o2o">

     <class name="User" table="user_o2o_pk">

         <id name="userId" column="userid">

              <generator class="identity"/>

            <!--标明主键采取自增列方式生成-->

         </id>

         <property name="userName" column="username"/>

         <one-to-one name="address" class="Address" cascade="all"/>

         <!--

标明一对一的关系在本类中的另一类的属性和类型,以及级连操作的范围

name属性标明User类中的Address类的对象名,class标明其类型

-->

    </class>

</hibernate-mapping>

 

Address类的映射文件Address.hbm.xml

 

<hibernate-mapping package="alan.hbn.rel.o2o">

     <class name="Address" table="address_o2o_pk">

         <id name="addressId" column="addressid">

              <generator  class=" identity "/>

                   <!--标明主键采用自增列策略-->

         </id>

         <property name="street" column="street"/>

         <property name="zipcode" column="zipcode"/>

         <many-to-one  name="user"

                      class="User"

                      column="userid"

                      cascade="all"

                      unique="true"/>

<!--   

这里的<many-to-one>是做外键引用策略使用的并不是AddressUser类是个一对多的关系,但是可以通过这对这种一对多关系加上特殊的约束来表示一对一的关系,也就是每一个User类的对象制等对应一个Address类的对象,就可以在表里对UserAddress一对多关系的外键上作文章,当一个User类对象对应多个Address类对象的时候,address表中的对应user表中的外键就有多条是相同的,只要强制这个外键是唯一的就可以达到一对一关系的目标了

-->

</class>

</hibernate-mapping>

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值