hibernate3中 一對多 和多對一的檢索策略

2021-08-30 18:23:44 字數 2934 閱讀 8772

在一對多的情況下。class

和student

為one-to-many

對映關係

在class

班級物件中,存在如下對映

無論lazy

設定為true

還是false

只要設定了outer-join

為true

,將採用左外連線檢索策略檢索class

關聯的student

物件,傳送如下sql

語句:

select

classinfo0_.id as id0_1_,

classinfo0_.class_name as class2_0_1_,

classinfo0_.info as info0_1_,

students1_.classid as classid3_,

students1_.id as id3_,

students1_.id as id1_0_,

students1_.name as name1_0_,

students1_.age as age1_0_,

students1_.classid as classid1_0_

from

testdb.class_info classinfo0_

left outer join

testdb.student students1_

on classinfo0_.id=students1_.classid

where

classinfo0_.id=?

如果outer-join 不設定(預設就是不設定),只設定lazy屬性,則按照lazy屬性的設定進行,lazy預設是false延遲載入,如果設定為true 則立即檢索全部相關的student物件

lazy

屬性

outer-join

屬性

檢索策略

true

(預設)

false

延遲檢索

false

false

立即檢索

true

true

迫切左外連線

false

ture

迫切左外連線

hibernate3

的一對多對映中預設lazy=true ,   outer-join=false.

即預設採用延遲檢索機制

在多對一對映關係中,比如student

物件中有如下的對映:

乙個student只屬於乙個班級,乙個班級有多個student.

在hibernate3中,針對關聯物件,預設的檢索機制就是延遲檢索.

many-to-one 對映中,同樣可以設定outer-join屬性,對於關聯的class物件,採用如下檢索方式

student.hbm.xml元素的outer-join屬性

classinfo.hbm.xml類級別的lazy屬性

檢索student物件時對關聯的classinfo物件使用的策略

auto (預設值)

true (預設)

延遲檢索

auto (預設值)

false

迫切左外連線

true

true

迫切左外連線

true

false

迫切左外連線

false

true(預設)

延遲檢索

false

false

立即檢索

總結:

對於多對以或者一對一這樣的關聯,應該優先考慮使用外連線檢索策略即將outer-join設定為true。一般我們在獲取物件時候,在大多數的業務邏輯情況下,同時也會獲取關聯的資料(外來鍵所表示的值沒有實際意義,比如實際中,獲取學生資訊時,我們希望立即獲取他的班級資訊,但當前只獲取了學生所在的班級編號,但並不知道班級名,所以我們可以使用做外連線同時獲取,這樣比立即檢索少用了sql語句)。

當然,如果僅僅是獲取學生的使用者資訊,不需要立即獲取所在的班級資訊,可以考慮使用延遲載入的策略。即預設的策略就是如此。

另外,hql中指定的檢索策略,會忽略配置檔案中相關的檢索策略

Hibernate中一對多和多對一關係

1 單向多對一和雙向多對一的區別?只需要從一方獲取另一方的資料時 就使用單向關聯 雙方都需要獲取對方資料時 就使用雙向關係 部門 人員 使用人員時 如果只需要獲取對應部門資訊 user.getdeptarment 不需要 從部門下的人員資訊時,就配置成單向 多對一 使用部門時 如果只需要獲取部門下人...

hibernate單向一對多和雙向一對多

單向一對多 例如有部門封裝類 private int deptno private string deptname private string location 有職員封裝類 private int empno private string empname private dept dept 在多...

hibernate3 一對一對映延遲載入失效

例子 新聞索引a表 內容b表,b在資料庫中是clob型別。根據主從關係,b中建立了外來鍵。下面a b也指實體類。a的對映配置中有lazy proxy 設定了延遲載入,但是實際執行並不會延遲載入,hibernate會執行乙個join或者另外執行一條獲取b的sql。從資料庫設計來說一對一實體關係模型是根...