`

2009-04-09 | Hibernate关联映射 (多对一、一对一单双向)

阅读更多

多对一映射 <many-to-one>

   

 //User.hbm.xml


<hibernate-mapping>
 <class name="User" table="t_user">
  <id name="id">
   <generator class="native"/>
  </id>
  <property name="name"/>
  <many-to-one name="group" column="groupid"/> 

  <!--
    <many-to-one name="group" column="groupid" cascade="all"/>
    如果改成 <many-to-one name="group" column="groupid" unique="true"/>则变成一对一唯一外键关联,因为它限制了"多"一端只能为一
  -->    
 </class>
</hibernate-mapping>

 

//Group.hbm.xml

 

<hibernate-mapping>
 <class name="Group" table="t_group">
  <id name="id">
   <generator class="native"/>
  </id>
  <property name="name"/>
 </class>
</hibernate-mapping>

 

一对一主键映射(双向,主键又做处键,默认根据主键加载)

 

 

 

 

<hibernate-mapping>
    <class name="Person" table="t_person">
         <id name="id">
                <generator class="foreign">
                        <param name="property">idCard</param>
                </generator>
         </id>
         <property name="name"/>
         <one-to-one name="idCard" constrained="true"/>

     </class>
</hibernate-mapping>

 

 

<hibernate-mapping>
       <class name="IdCard" table="t_idcard">
              <id name="id">
                    <generator class="native"/>
              </id>
              <property name="cardNo"/>
              <one-to-one name="person"/>   Person-->IdCard单向关联时,不用这句

 </class>
</hibernate-mapping>

 

一对一外键关联映射(双向) 其中,单向是<many-to-one>的一种特例

 

 

 

 

Person端是<many-to-one>,而IdCard端是<one-to-one>


一对一唯一外键关联双向,需要在另一端(idcard),添加<one-to-one>标签,指示hibernate如何加载
其关联对象,默认根据主键加载person,外键关联映射中,因为两个实体采用的是person的外键维护的关系,
所以不能指定主键加载person,而要根据person的外键加载,所以采用如下映射方式:
<one-to-one name="person" property-ref="idCard"/>

 

 

 

<hibernate-mapping>
       <class name="Person" table="t_person">
               <id name="id">
                      <generator class="native"/>
               </id>
               <property name="name"/>
               <many-to-one name="idCard" unique="true"/>

        </class>
</hibernate-mapping>

 

<hibernate-mapping>
         <class name="IdCard" table="t_idcard">
                 <id name="id">
                         <generator class="native"/>
                 </id>
                 <property name="cardNo"/>
                 <one-to-one name="person" property-ref="idCard"/>

         </class>
</hibernate-mapping>

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics