hibernate一對多、多對多的實體設計和配置檔案配置

zer0_li發表於2019-01-19

一對多

實體類

一: private Set<LinkMan> linkMans; // 表達一對多關係
多: private Customer customer ; //表達多對一關係

配置檔案

一:

    <!-- 集合,一對多關係,在配置檔案中配置 -->
    <!-- 
        name屬性:   集合屬性名
        column屬性: 外來鍵列名
        class屬性:  與我關聯的物件完整類名
     -->
     <!-- 
         級聯操作: cascade屬性
             save-update: 級聯儲存更新
             delete:      級聯刪除
             all:         save-update+delete
         級聯操作: 簡化操作.目的就是為了少些兩行程式碼.
      -->
      <!-- inverse屬性: 配置關係是否維護. 
                 true:          customer不維護關係
                 false(預設值): customer維護關係
          inverse屬性: 效能優化.提高關係維護的效能.
          原則: 無論怎麼放棄,總有一方必須要維護關係.
          一對多關係中: 一的一方放棄.也只能一的一方放棄.多的一方不能放棄.
      -->
    <set name="linkMens" inverse="true" cascade="delete">
        <key column="lkm_cust_id" ></key>
        <one-to-many class="LinkMan" />
    </set>

多:

    <!-- 多對一 -->
    <!-- 
        name屬性:   引用屬性名
        column屬性: 外來鍵列名
        class屬性:  與我關聯的物件完整類名
     -->
     <!-- 
         級聯操作: cascade屬性
             save-update: 級聯儲存更新
             delete:      級聯刪除
             all:         save-update+delete
         級聯操作: 簡化操作.目的就是為了少些兩行程式碼.
      -->
      <!-- 多的一方: 不能放棄維護關係的.外來鍵欄位就在多的一方.  -->
    <many-to-one name="customer" column="lkm_cust_id" class="Customer"></many-to-one>

多對多

實體類

多:private Set<User> users; // 表達多對多關係
多:private Set<Role> roles; // 表達多對多關係

配置檔案
多:

    <!-- 多對多關係表達 -->
    <!-- 
        name: 集合屬性名
        table: 配置中間表名
        key
         column: 外來鍵,別人引用"我"的外來鍵列名
        many-to-many
         class:   我與哪個類是多對多關係
         column:  外來鍵.我引用別人的外來鍵列名
     -->
    <!-- 使用inverse屬性
        true: 放棄維護外來鍵關係
        false(預設值):維護關係
        
    結論: 將來在開發中,如果遇到多對多關係.一定要選擇一方放棄維護關係.
         一般誰來放棄要看業務方向. 例如錄入員工時,需要為員工指定所屬角色.
         那麼業務方向就是由員工維護角色. 角色不需要維護與員工關係.角色放棄維護
     -->        
    <set name="users" table="sys_user_role" inverse="true" >
        <key column="role_id" ></key>
        <many-to-many class="User" column="user_id" ></many-to-many>
    </set>

多:

    <!-- 多對多關係表達 -->
    <!-- 
        name: 集合屬性名
        table: 配置中間表名
        key
         column: 外來鍵,別人引用"我"的外來鍵列名
        many-to-many
         class:   我與哪個類是多對多關係
         column:  外來鍵.我引用別人的外來鍵列名
     -->
     <!-- cascade級聯操作:
                 save-update:  級聯儲存更新
                 delete:       級聯刪除
                 all:          級聯儲存更新+級聯刪除
         結論: cascade簡化程式碼書寫.該屬性使不使用無所謂. 建議要用只用save-update.
              如果使用delete操作太過危險.尤其在多對多中.不建議使用.
     -->
    <set name="roles" table="sys_user_role" cascade="save-update" >
        <key column="user_id" ></key>
        <many-to-many class="Role" column="role_id" ></many-to-many>
    </set>

相關文章