天天看點

第九章 關系映射 一對多關聯映射

如:department與employee

employee中有一個department_id的外鍵

department:

employee:

department.hbm.xml:(與普通的映射檔案一樣)

employee.hbm.xml:

增加:

查詢:

查詢department的時候可以得到外鍵關聯的所有employee對象。

注意事項:

a、錯誤提示:field'department_id'

doesn't have a default value

   資料表中把"department_id"設成可以為空的,但是hibernate先執行的是:

因為hibernate執行的順序是這樣的:

hibernate:insert into hibernate.department (name) values (?)

hibernate:insert into hibernate.employee (name) values (?)

hibernate:update hibernate.employee set department_id=? where id=?

department_id外鍵是作為一個後來才更新的存在。所有不能設定為非空的。

b、department.hbm.xml中要設定cascade="all"(級聯),或其它有效值,不然,在儲存department對象時,相關的employee對象不會被儲存。(none,all,save-update,delete..)

c、department.hbm.xml中set标簽的inverse屬性不能設定為"true"(放棄維護關聯關系),inverse的預設值是"false",是以不加inverse也可以。看書上說:在一對多的關聯關系實作中,最好設定inverse="true",将有助于性能的改善。是以一開始就用了inverse="true",user和card對象都分别正确寫入資料庫了,但是就是departmentid字段沒有被自動寫入。

d、多對一與一對多可以一起用,形成雙向關系。

e.one-to-many、many-to-one、many-to-many懶加載分析:

必須同時滿足下面的兩個條件時才能實作懶散加載:

1).lazy!=false(lazy預設方式就!=false,lazy是=proxy)

2).fetch=select(fetch預設方式即為select)