hibernate的設(shè)置文件工作原理與2種設(shè)計(jì):一對多、多對多
發(fā)表時間:2023-07-13 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]"一對多"是最普遍的映射關(guān)系,簡單來講就如消費(fèi)者與訂單的關(guān)系。一對多:從消費(fèi)者角的度來說一個消費(fèi)者可以有多個訂單,即為一對多。多對一:從訂單的角度來說多個訂單可以對應(yīng)一個消費(fèi)者,...
"一對多"是最普遍的映射關(guān)系,簡單來講就如消費(fèi)者與訂單的關(guān)系。一對多:從消費(fèi)者角的度來說一個消費(fèi)者可以有多個訂單,即為一對多。多對一:從訂單的角度來說多個訂單可以對應(yīng)一個消費(fèi)者,即為多對一。個人簡單的一點(diǎn)小結(jié) 。
一對多
實(shí)體類
一: private Set<LinkMan> linkMans; // 表達(dá)一對多關(guān)系
多: private Customer customer ; //表達(dá)多對一關(guān)系
配置文件
一:
<!-- 集合,一對多關(guān)系,在配置文件中配置 -->
<!--
name屬性: 集合屬性名
column屬性: 外鍵列名
class屬性: 與我關(guān)聯(lián)的對象完整類名
-->
<!--
級聯(lián)操作: cascade屬性
save-update: 級聯(lián)保存更新
delete: 級聯(lián)刪除
all: save-update+delete
級聯(lián)操作: 簡化操作.目的就是為了少些兩行代碼.
-->
<!-- inverse屬性: 配置關(guān)系是否維護(hù).
true: customer不維護(hù)關(guān)系
false(默認(rèn)值): customer維護(hù)關(guān)系
inverse屬性: 性能優(yōu)化.提高關(guān)系維護(hù)的性能.
原則: 無論怎么放棄,總有一方必須要維護(hù)關(guān)系.
一對多關(guān)系中: 一的一方放棄.也只能一的一方放棄.多的一方不能放棄.
-->
<set name="linkMens" inverse="true" cascade="delete">
<key column="lkm_cust_id" ></key>
<one-to-many class="LinkMan" />
</set>
多:
<!-- 多對一 -->
<!--
name屬性: 引用屬性名
column屬性: 外鍵列名
class屬性: 與我關(guān)聯(lián)的對象完整類名
-->
<!--
級聯(lián)操作: cascade屬性
save-update: 級聯(lián)保存更新
delete: 級聯(lián)刪除
all: save-update+delete
級聯(lián)操作: 簡化操作.目的就是為了少些兩行代碼.
-->
<!-- 多的一方: 不能放棄維護(hù)關(guān)系的.外鍵字段就在多的一方. -->
<many-to-one name="customer" column="lkm_cust_id" class="Customer"></many-to-one>
多對多
實(shí)體類
多:private Set<User> users; // 表達(dá)多對多關(guān)系
多:private Set<Role> roles; // 表達(dá)多對多關(guān)系
配置文件
多:
<!-- 多對多關(guān)系表達(dá) -->
<!--
name: 集合屬性名
table: 配置中間表名
key
column: 外鍵,別人引用"我"的外鍵列名
many-to-many
class: 我與哪個類是多對多關(guān)系
column: 外鍵.我引用別人的外鍵列名
-->
<!-- 使用inverse屬性
true: 放棄維護(hù)外鍵關(guān)系
false(默認(rèn)值):維護(hù)關(guān)系
結(jié)論: 將來在開發(fā)中,如果遇到多對多關(guān)系.一定要選擇一方放棄維護(hù)關(guān)系.
一般誰來放棄要看業(yè)務(wù)方向. 例如錄入員工時,需要為員工指定所屬角色.
那么業(yè)務(wù)方向就是由員工維護(hù)角色. 角色不需要維護(hù)與員工關(guān)系.角色放棄維護(hù)
-->
<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>
多:
<!-- 多對多關(guān)系表達(dá) -->
<!--
name: 集合屬性名
table: 配置中間表名
key
column: 外鍵,別人引用"我"的外鍵列名
many-to-many
class: 我與哪個類是多對多關(guān)系
column: 外鍵.我引用別人的外鍵列名
-->
<!-- cascade級聯(lián)操作:
save-update: 級聯(lián)保存更新
delete: 級聯(lián)刪除
all: 級聯(lián)保存更新+級聯(lián)刪除
結(jié)論: cascade簡化代碼書寫.該屬性使不使用無所謂. 建議要用只用save-update.
如果使用delete操作太過危險(xiǎn).尤其在多對多中.不建議使用.
-->
<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>
相關(guān)推薦:
數(shù)據(jù)庫設(shè)計(jì)多對多關(guān)系的幾種形態(tài)_MySQL
MySQL多實(shí)例的配置和管理詳細(xì)
以上就是hibernate的配置文件工作原理和兩種設(shè)計(jì):一對多、多對多的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!
學(xué)習(xí)教程快速掌握從入門到精通的SQL知識。