Hibernate建立多對一的單向關聯關係,hibernate多對關聯
以下內容整理自《精通Hibernate》第二版
映射代碼:
<span style="font-size:18px;"><many-to-one name="customer" column="CUSTOMER_ID" class="mypack.Customer" not-null="true" lazy="false"/></span>
<many-to-one>元素建立了customer屬性和ORDERS表的外鍵CUSTOMER_ID之間的映射。它包括以下屬性。 name:設定待映射的持久化類的屬性的名字,此處為Order類的customer屬性。
column:設定和持久化類的屬性對應的表的外鍵,此處為ORDERS表的外鍵CUSTOMER_ID。class:設定待映射的持久化類的屬性的類型,此處設定customer屬性為Customer類型。not-null:如果為true,表示customer屬性不允許為null,該屬性的預設值為false。not-null屬性會影響hbm2ddl工具產生的資料庫schema,hbm2ddl工具會為ORDERS表的CUSTOMER_ID外鍵設定not null約束,但not-null屬性不會影響hbm2java工具產生Java原始碼。此外,not-null屬性還會影響Hibernate的運行時行為,Hibernate在向資料庫中儲存Order對象時,會先檢查它的customer屬性是否為null。lazy:如果為proxy,表示對關聯的Customer對象使用延遲檢索策略並且使用代理,這是預設值。如果為false,就意味著當Hibernate從資料庫中載入Order對象時,還會立即自動載入與它關聯的Customer對象
註:當Hibernate持久化一個臨時對象(指剛通過new語句建立),在預設情況下,它不會自動持久化所關聯的其他臨時對象,所以會拋出TransientObjectException異常。如果希望當Hibernate持久化一個臨時對象時自動持久化所關聯的臨時對象,可以把<many-to-one>的cascade屬性設為"save-update",cascade屬性的預設值為"none"。當cascade屬性為"save-update",表明儲存或更新當前對象時(即執行insert或update語句時),會級聯儲存或更新與它關聯的對象。