hibernate 關係對映

2021-08-31 15:30:33 字數 2771 閱讀 8078

[color=red]hibernate 多對一對映[/color]

關聯對映的本質:將關聯關係對映到資料庫,關聯關係在物件模型域中體現為乙個或多個引用

標籤會在「多」的一端新增乙個外來鍵,指向「一」的一端,這個外來鍵是由

中的column的屬性定義的,如果忽略這個屬性,預設建立的外來鍵與實體類的屬性名相同

定義示例:

* 理解cascade

* 是物件之間的連鎖操作(只對增刪改起作用)

[color=red]hibernate一對一主鍵關聯對映(單項關聯)person--->idcard[/color]

主鍵關聯對映:讓兩個物件的id保持相同,這樣可以避免多餘的字段被建立

標籤指示hibernate如何載入其引用物件,預設情況下根據主鍵載入其引用物件

idcard

[color=red]hibernate一對一主鍵關聯對映(雙項關聯)person<--->idcard[/color]

需要在idcard加入標籤,指示hibernate如何載入person,預設情況下根據主鍵載入

[color=red]hibernate一對一唯一外來鍵關聯對映(單項關聯)person--->idcard[/color]

一對一唯一外來鍵關聯實際上是多對一關聯對映的特例

可以採用標籤,指定「多」的一端unique=「true」,即限制了「多」一端的多重性為「一」

這樣就構成了一對一唯一外來鍵關聯對映

person hbm

idcard hbm

[color=red]hibernate一對一唯一外來鍵關聯對映(雙向關聯)person<--->idcard[/color]

一對一唯一外來鍵雙向關聯對映,需要在另一端(idcard),新增標籤,指示hibernate如何

載入其引用物件,預設情況下根據主鍵載入person,因為外來鍵關聯對映中,兩個實體的關係是由person的

外來鍵idcard維護的,所以不能指定person的主鍵來載入person,而是根據person的外來鍵idcard來載入person

物件,如:

[color=red]hibernate一對多關聯對映(單向關聯)classes--->student[/color]

這種關聯對映的原理採用的是多對一關聯對映的原理

多對一關聯對映,是在「多」的一端新增乙個外來鍵指向「一」的一端,它維護的關係多到一的關係

一對多關聯應是,是在「一」的一端新增乙個外來鍵指向「多」的一端,它維護的關係一到多的關係

也就是說,一對多和多對一關聯對映的策略是一致的,只是站的角度不同

缺點:* 更新student表中的classesid欄位時,會發出多餘的update語句,來維護classes到student之間的關係

* 如果將t_student中的classesid設定為非空,則不能成功儲存

[color=red]hibernate多對多關聯對映(單項關聯)user--->role [/color]

[color=red]hibernate多對多關聯對映(雙項關聯)user<--->role [/color]

[color=red]基本對映[/color]

類-->資料庫表

普通屬性-->表字段

[color=red]

通過對映到資料庫表,通過將普通屬性對映到表字段。

所謂普通屬性不包擴,自定義類,集合,陣列[/color]

實體類主要設計原則:

* 實現乙個預設的(即無引數的)構造方法(constructor)

* 提供乙個標識屬性(identifier property)(可選)

* 使用非final的類(可選)

* 為持久化欄位宣告訪問器(accessors)(可選)

注意:類的名稱和屬性的名稱如果和sql中的關鍵子重複,必須用table或column重新命名

id的對映:

了解uuid、native和assigned

注意:類的名稱和類中屬性的名稱,如果和sql中的關鍵字重複,必須用table或column屬性重新命名

lazy策略可以用在:

* 標籤上,可以取值:true/false

* 標籤上,可以取值:true/false,這個特性需要類增強工具

* 等集合上,可以取值:true/false/extra

* 和(單端關聯)等標籤上,可以取值:false/proxy /noproxy

概念:1、lazy是只有需要的時候才發出sql語句

2、hibernate支援lazy策略,只有session開啟狀態下才有效

hibernate類級別的lazy測試,可以控制什麼時候載入這些普通屬性

測試session.flush

[color=red]1、session在什麼情況下清理快取:

* 預設情況下,當應用程式提交事務,如:transaction.commit;

* 當我們顯示呼叫flush的時候

* 在執行某些查詢的時候,如:iterate[/color]

2、session.flush()主要完成兩件事情:

* 清理快取

* 執行sql

[color=red]flush是把cache中的資料同步到資料庫中去,要清理需要呼叫clear()。[/color]

commit()之前預設執行 flush。flush生成sql語句並執行sql語句,執行sql語句不等於事務的提交。

[color=red]flush後在mysql中就可以看到插入的資料,但是mysql的隔離級別比較高,通過select語句可以查詢,為可重複讀。可以修改mysql的預設隔離級別為未提交對,就可以看到執行但是還沒有提交的記錄。[/color]

Hibernate 對映關係

對映關係通俗點來說 address實體類 不用配置 user實體類 編寫配置 public class user student實體類 不用配置 班級實體類 編寫配置 public class clazz.student實體類 不用配置 課程實體類 編寫配置 public class course....

Hibernate關係對映

二 關係對映 1.關聯對映 2.繼承對映 3.復合主鍵對映 復合 聯合 主鍵對映 通常做法是將主鍵相關字段放到乙個單獨的類中,這樣類是有要求的 必須實現序列化介面 覆蓋equals和hashcode方法 主鍵,建議使用沒有業務語義的,減少業務變更時的修改 4.元件對映 component對映 在hi...

Hibernate 繼承關係對映

繼承關係對映 繼承是物件導向程式設計中乙個很重要的特徵,在做物件導向的分析與設計時,經常會設計出具體繼承關聯對映的持久化類。如何把這些持久化類之間的繼承關係對映到關聯式資料庫上的問題已解決。繼承在物件模型中是is a的關係,但在關係模型中,實體之間只有has a的關係,也就是說,繼承在物件模型和關係...