Hibernate學習——多表設計(配置)
阿新 • • 發佈:2018-12-09
-
本文主要講述Hibernate中配置檔案多表關係的配置書寫
一對多&多對一(一個客戶方有多個聯絡人事例)
- 一對多&多對一關係,在Hibernate專案實體類中的表現方式:
- 在一的一方的實體類中新增多的實體類集合屬性(使用Set集合)——客戶實體
private Set<Linkman> linkmans=new HashSet<Linkman>(); public Set<Linkman> getLinkmans() { return linkmans; } public void setLinkmans(Set<Linkman> linkmans) { this.linkmans = linkmans; }
- 在多的一方的實體類中新增一的實體類屬性——聯絡人實體
private Customer customer; public Customer getCustomer() { return customer; } public void setCustomer(Customer customer) { this.customer = customer; }
- 一對多&多對一關係,在Hibernate專案配置檔案中的變現方式:
- 一的一方的配置檔案中:
<!-- 一的一方:配置一對多關係 --> <!-- name屬性:一的實體中表示多的一方的屬性名 key元素:column屬性:多的一方的表中外來鍵列名 one-to-many元素:class屬性:與我關聯的實體全包名 cascade屬性:配置是否級聯操作(多的一方同樣可以配置此屬性) save-update:儲存和更新級聯 delete:刪除級聯 all:save-update + delete inverse屬性:配置關係維護 true:設定true的一方不維護關係————多的一方必須維護,所以要配置只需要在一的一方配置 false:預設為false,一的一方也維護關係 --> <set name="linkmans" inverse="true"> <key column="lkm_cust_id"></key> <one-to-many class="com.huhu.domain.Linkman"/> </set>
- 多的一方的配置檔案中:
<!-- 多的一方:配置多對一關係 --> <!-- many-to-one元素: name屬性:多的一方的實體中表示一一方的屬性名 column屬性:多的一方表中的外來鍵列名 class屬性:與我關聯的實體的全包名 cascade屬性:配置是否級聯操作(多的一方同樣可以配置此屬性) save-update:儲存和更新級聯 delete:刪除級聯 all:save-update + delete inverse屬性:配置關係維護————多的一方無法設定不維護,否則報錯,預設維護即可 --> <many-to-one name="customer" column="lkm_cust_id" class="Customer"> </many-to-one>
- 注意:這些配置都是在<class></class>元素內部
多對多(兩個一對多)
-
在實體類中就不演示了,就是分別在兩個實體中新增對方的實體類集合作為屬性(Set集合)
-
在配置檔案中:
- 多對多關係配置:
<!-- 配置多對多約束 --> <!-- name屬性:本實體中所對的集合的列名 table屬性:中間表的表名 inverse屬性:true時放棄維護(多對多表結構中,一定要選擇一方放棄維護) key元素:column屬性:本實體在中間表中外來鍵的列名 many-to-many元素: class屬性:與本實體相對的實體類全包名 column屬性:與本實體相對的實體類在中間表中外來鍵的列名 --> <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>