1. 程式人生 > >Hibernate學習筆記(3)---hibernate關聯關系映射

Hibernate學習筆記(3)---hibernate關聯關系映射

gen -m type foreign out eas ner 機制 路徑

一對一關聯

假設有兩個持久化類(實體類)User與Address,它們之間存在一對一的關系 技術分享

1,通過主鍵關聯(個人偏向另外一種)

User.hbm.xml文件配置
<id name="userid" type="java.lang.Integer">
            <column name="userid" />
            <!-- 主鍵關聯,將主鍵生成策略改為foreign,表明由關聯類來生成主鍵,
            	即直接使用另外關聯類的主鍵值,該實體類不能生成主鍵 --> 
            <generator class="foreign" />
             <para name="property">address</para><!--  -->
        </id>       
        <property name="name" type="java.lang.String">
            <column name="name" length="12" />
        </property>
        <property name="password" type="java.lang.String">
            <column name="password" length="16" />
        </property>
<one-to-one name="address" class="Address" constrained="true"></one-to-one></span>

  Addrss.hbm.xml文件配置

<id name="addressid" type="java.lang.Integer">  
            <column name="addressid" />  
            <generator class="identity" />  
        </id>         
        <property name="addressinfo" type="java.lang.String">  
            <column name="addressinfo" length="12" />  
        </property>

  

2通過外鍵關聯

兩張表主鍵不同,通過給一張表添加外鍵列來保持一對一關系,所以在user 表中加入address_id 技術分享 直接在原始的User配置文件加入下行代碼
 <!-- class屬性:另外個實體類,將其的address屬性映射為address表的外鍵address_id,  
        unique指定一對一映射  
         -->  
        <many-to-one name="address" class="Address" unique="true">  
        <!-- 外鍵 -->  
            <column name="address_id"></column>  
        </many-to-one>

  

一對多關聯映射

還是上方例子為例,一個用戶擁有多個地址 第一步:在一的一方表示出多(即在用戶中表示多) 在User.java表示多,生成get,set方法
private Set<Address> setAddress = new HashSet<Address>();  
  
    public Set<Address> getSetAddress() {  
        return setAddress;  
    }  
    public void setSetAddress(Set<Address> setAddress) {  
        this.setAddress = setAddress;  
    }

  第二步:在Address.java表示一

  

private User user;  
public User getUser() {  
    return user;  
}  
public void setUser(User user) {  
    this.user = user;  
}  

  

第三步:配置Uesr.hbm.xml與Address.hbm.xml的基本映射 第四步:在一的配置文件(User.hbm.xml)配置多的一方
 <!--set集合名稱 -->  
    <!--hibernate機制,雙向維護外鍵       columen 外鍵名稱-->  
     <key column="user_address"></key>  
     <one-to-many class="Address全路徑"/>  
</set>

  第五步:在多的配置文件(Address.hbm.xml)配置一的一方

<!--name屬性 寫address.java表示的user-->  
    <many-to-one name="user" class="User全路徑"  column="外鍵名"></many-to-one>

  

多對多的關聯映射

多對多一般創建第三張中間表來維護兩個表之間關系 場景:公司裏面一個用戶有多個角色,一個角色就多個用戶 第一步:創建實體類對象(user ,role) 第二步:在user.java表示role和在role.java表示user user.java表示role
private Set<Role> setRole = new HashSet<Role>();  
public Set<Role> getSetRole() {  
    return setRole;  
}  
public void setSetRole(Set<Role> setRole) {  
    this.setRole = setRole;  
}

  role.java表示user

private Set<User> setUser = new HashSet<User>();  
      
    public Set<User> getSetUser() {  
        return setUser;  
    }  
    public void setSetUser(Set<User> setUser) {  
        this.setUser = setUser;  
    }

  

第三步:配置兩個類的基本映射 第四步:分別在配置文件中配置 user配置role
<!--   
    name  角色set集合名稱  
    table 第三張表的名稱  
     -->  
    <set name="setRole" table="t_ub">  
    <!-- 配置當前映射文件在第三張表外鍵名稱 -->  
        <key column="uid"></key>  
        <many-to-many class="路徑" column="rid"></many-to-many>  
    </set>  

  role配置user

 <!--   
name  角色set集合名稱  
table 第三張表的名稱  
 -->  
<set name="setUser" table="t_ub">  
<!-- 配置當前映射文件在第三張表外鍵名稱 -->  
    <key column="bid"></key>  
    <many-to-many class="路徑" column="uid"></many-to-many>  
</set>  

  

技術分享 由於t_user表與t_role沒有外鍵關聯,可以直接進行crud操作,兩表的關系通過第三張表來維護(後面會寫第三張表的維護)

Hibernate學習筆記(3)---hibernate關聯關系映射