"一對多"是最普遍的映射關係,簡單來講就如消費者與訂單的關係。一對多:從消費者角的度來說一個消費者可以有多個訂單,即為一對多。多對一:從訂單的角度來說多個訂單可以對應一個消費者,即為多對一。個人簡單的一點小結 。
一對多
實體類
一: 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>