1. 程式人生 > >Hibernate學習——多表設計(配置)

Hibernate學習——多表設計(配置)

  • 本文主要講述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>