如: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)