HQL join fetch相關介紹

2021-05-23 07:01:48 字數 1427 閱讀 2384

join用法:

主要有inner join 及 outer join:

最常用的(預設是inner):

select 《要選擇的字段》 from 《主要資料表》

inner join 的主要精神就是 exclusive , 叫它做排他性吧! 就是講 join 規則不相符的資料就會被排除掉, 譬如講在 product 中有一項產品的供貨商** (supplierid), 沒有出現在 suppliers 資料表中, 那麼這筆記錄便會被排除掉

outer join:

select 《要查詢的字段》 from

[outer] join

語 法中的 outer 是可以省略的, 例如你可以用 left join 或是 right join, 在本質上, outer join 是 inclusive, 叫它做包容性吧! 不同於 inner join 的排他性, 因此在 left outer join 的查詢結果會包含所有 left 資料表的資料, 顛倒過來講, right outer join 的查詢就會包含所有 right 資料表的資料

另外,還有全外聯:

full join 或 full outer join

完整外部聯接返回左表和右表中的所有行。當某行在另乙個表中沒有匹配行時,則另乙個表的選擇列表列包含空值。如果表之間有匹配行,則整個結果集行包含基表的資料值。

以及,

交叉聯接

交叉聯接返回左表中的所有行,左表中的每一行與右表中的所有行組合。交叉聯接也稱作笛卡爾積。

沒有 where 子句的交叉聯接將產生聯接所涉及的表的笛卡爾積。第乙個表的行數乘以第二個表的行數等於笛卡爾積結果集的大小。也就是說在沒有 where 子句的情況下,若表 a 有 3 行記錄,表 b 有 6 行記錄 : :

select a.*,b.* from 表a cross join 表b

那以上語句會返回 18 行記錄。

fetch:

在我們查詢parent物件的時候,預設只有parent的內容,並不包含childs的資訊,如果在parent.hbm.xml裡設定lazy="false"的話才同時取出關聯的所有childs內容. 問題是我既想要hibernate預設的效能又想要臨時的靈活性該怎麼辦?  這就是fetch的功能。我們可以把fetch與lazy="true"的關係模擬為事務當中的程式設計式事務與宣告式事務,不太準確,但是大概是這個意思。總值,fetch就是在**這一層給你乙個主動抓取得機會.

parent parent = (parent)hibernatetemplate.execute(new hibernatecallback()          });         assert.asserttrue(parent.getchilds().size() > 0);

你可以在lazy="true"的情況下把fetch去掉,就會報異常. 當然,如果lazy="false"就不需要fetch了

Python之requests模組相關介紹

在之前的文章中我們一直用到的庫是 urllib.request,該庫已經包含了平常我們使用的大多數功能,但是它的 api 使用起來讓人感覺不太好,而 requests 自稱 http for humans 說明使用更簡潔方便。requests 唯一的乙個非轉基因的 python http 庫,人類可...

JMeter 四 介紹HTTP協議相關配置元件

背景介紹 http協議仍是網際網路工作中的大部分內容,jmeter也是全力支撐,滿足各種http測試條件。1 http cookie manager cookie是瀏覽器產生的,用來儲存使用者資訊的 該屬性管理器用於管理test plan執行時的所有cookie。http cookie manage...

linux中關於 proc下面的相關內容介紹

這篇文章寫一下以前整理的檢視系統資源 效能的一些命令。本來那時就想系統地整理的,但事多人懶沒去做,現在就簡單寫寫。檢視cpu cat proc cpuinfo 該命令可以檢視系統cpu有多少個核,頻率,特性等等。檢視cpu核心頻率 cat proc cpuinfo grep mhz uniq cpu...