HQL連接查詢

HQL常用連接類型

  • 內(nèi)連接 inner join 或 join
  • 迫切內(nèi)連接 inner join fetch 或 join fetch
  • 左外連接 left outer join 或 left join
  • 迫切左外連接 left outer join fetch 或 left join fetch
  • 右外連接 right outer join 或 right join

內(nèi)連接 獲取的就是兩個表中的交集部分

左連接會讀取左邊數(shù)據(jù)表的全部數(shù)據(jù),即使右邊數(shù)據(jù)表沒有對應(yīng)數(shù)據(jù)。

右連接會讀取右邊數(shù)據(jù)表的全部數(shù)據(jù)桩盲,即使左邊數(shù)據(jù)表沒有對應(yīng)數(shù)據(jù)蜜笤。

內(nèi)連接 查詢部門和員工信息 from Entity [inner] join Entity.property

List<Object[]> objects=this.getCurrentSession().createQuery("from Department d join d.emps").list();
for(Object[] object:objects)
        {
            System.out.println(object[0]+"\t"+object[1]);
        }

Hibernate:
select
department0_.deptNo as deptNo0_0_,
emps1_.empNo as empNo1_1_,
department0_.deptName as deptName0_0_,
department0_.location as location0_0_,
emps1_.empName as empName1_1_,
emps1_.job as job1_1_,
emps1_.salary as salary1_1_,
emps1_.deptNo as deptNo1_1_
from
project.Department department0_
inner join
project.Emp emps1_
on department0_.deptNo=emps1_.deptNo

list集合中的每個元素都是一個Object數(shù)組,數(shù)組的第一個元素時Dept元素對象饶唤,第二個元素時Emp對象姐直,Dept對象的emps集合元素沒有被初始化慕嚷,即emps集合里沒有存放關(guān)聯(lián)的Emp對象。Unable to evaluate the expression Method threw 'org.hibernate.LazyInitializationException' exception.

迫切內(nèi)連接查詢部門和員工信息from Entity [inner] join fetch Entity.property

List<Department> objects=this.getCurrentSession().createQuery("select distinct d from Department d join fetch d.emps").list();
for(Department department:objects)
        {
            System.out.println(department.getEmps());
        }

Hibernate:
select
department0_.deptNo as deptNo0_0_,
emps1_.empNo as empNo1_1_,
department0_.deptName as deptName0_0_,
department0_.location as location0_0_,
emps1_.empName as empName1_1_,
emps1_.job as job1_1_,
emps1_.salary as salary1_1_,
emps1_.deptNo as deptNo1_1_,
emps1_.deptNo as deptNo0_0__,
emps1_.empNo as empNo0__
from
project.Department department0_
inner join
project.Emp emps1_
on department0_.deptNo=emps1_.deptNo

list集合中的每個元素都是Dept對象谐檀,Hibernate使用fetch關(guān)鍵字實(shí)現(xiàn)了將Emp對象讀出來后立即填充到對應(yīng)的Dept對象的集合屬性中。如果有一些Dept對象裁奇,可以使用select distinct d from Dept d inner join fetch d.emps解決桐猬。

左外連接 from Entity left [outer] join Entity.property

List<Object[]> objects=this.getCurrentSession().createQuery("from Department d left join d.emps").list();
 for (Object[] object:objects)
        {
            System.out.println(object[0]+"\t"+object[1]);
        }

Hibernate:
select
department0_.deptNo as deptNo0_0_,
emps1_.empNo as empNo1_1_,
department0_.deptName as deptName0_0_,
department0_.location as location0_0_,
emps1_.empName as empName1_1_,
emps1_.job as job1_1_,
emps1_.salary as salary1_1_,
emps1_.deptNo as deptNo1_1_
from
project.Department department0_
left outer join
project.Emp emps1_
on department0_.deptNo=emps1_.deptNo

迫切左外連接from Entity left [outer] join fetch Entity.property

List<Department> objects=this.getCurrentSession().createQuery("select distinct d from Department d left join fetch d.emps").list();

for (Department department:objects)
        {
            System.out.println(department.getEmps());
        }

Hibernate:
select
distinct department0_.deptNo as deptNo0_0_,
emps1_.empNo as empNo1_1_,
department0_.deptName as deptName0_0_,
department0_.location as location0_0_,
emps1_.empName as empName1_1_,
emps1_.job as job1_1_,
emps1_.salary as salary1_1_,

    emps1_.deptNo as deptNo1_1_,
    emps1_.deptNo as deptNo0_0__,
    emps1_.empNo as empNo0__ 
from
    project.Department department0_ 
left outer join
    project.Emp emps1_ 
        on department0_.deptNo=emps1_.deptNo

右外連接 from Entity right [outer] join Entity.property

List<Object[]> objects=this.getCurrentSession().createQuery("from Department d right join d.emps").list();
 for (Object[] object:objects)
        {
            System.out.println(object[0]+"\t"+object[1]);
        }

Hibernate:
select
department0_.deptNo as deptNo0_0_,
emps1_.empNo as empNo1_1_,
department0_.deptName as deptName0_0_,
department0_.location as location0_0_,
emps1_.empName as empName1_1_,
emps1_.job as job1_1_,
emps1_.salary as salary1_1_,
emps1_.deptNo as deptNo1_1_
from
project.Department department0_
right outer join
project.Emp emps1_
on department0_.deptNo=emps1_.deptNo

隱式內(nèi)連接 按部門條件查詢員工信息

 List<Emp> emps=this.getCurrentSession().createQuery("from Emp e where e.department.deptNo=:deptNo")
                .setParameter("deptNo",deptNo)
                .list();

Hibernate:
select
emp0_.empNo as empNo1_,
emp0_.empName as empName1_,
emp0_.job as job1_,
emp0_.salary as salary1_,
emp0_.deptNo as deptNo1_
from
project.Emp emp0_
where
emp0_.deptNo=?
Hibernate:
select
department0_.deptNo as deptNo0_0_,
department0_.deptName as deptName0_0_,
department0_.location as location0_0_
from
project.Department department0_
where
department0_.deptNo=?

List<Object[]> objects=this.getCurrentSession().createQuery(" select e.empName,e.department.deptName from Emp  e").list();

Hibernate:
select
emp0_.empName as col_0_0_,
department1_.deptName as col_1_0_
from
project.Emp emp0_,
project.Department department1_
where
emp0_.deptNo=department1_.deptNo

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市刽肠,隨后出現(xiàn)的幾起案子溃肪,更是在濱河造成了極大的恐慌,老刑警劉巖音五,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惫撰,死亡現(xiàn)場離奇詭異乓搬,居然都是意外死亡佩耳,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進(jìn)店門撵摆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人莉撇,你說我怎么就攤上這事呢蛤。” “怎么了棍郎?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵其障,是天一觀的道長。 經(jīng)常有香客問我涂佃,道長励翼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任辜荠,我火速辦了婚禮汽抚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘伯病。我一直安慰自己造烁,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布午笛。 她就那樣靜靜地躺著惭蟋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪药磺。 梳的紋絲不亂的頭發(fā)上告组,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天,我揣著相機(jī)與錄音癌佩,去河邊找鬼木缝。 笑死,一個胖子當(dāng)著我的面吹牛驼卖,可吹牛的內(nèi)容都是我干的氨肌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼酌畜,長吁一口氣:“原來是場噩夢啊……” “哼怎囚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起桥胞,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤恳守,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后贩虾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體催烘,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年缎罢,在試婚紗的時候發(fā)現(xiàn)自己被綠了伊群。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片考杉。...
    茶點(diǎn)故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖舰始,靈堂內(nèi)的尸體忽然破棺而出崇棠,到底是詐尸還是另有隱情,我是刑警寧澤丸卷,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布枕稀,位于F島的核電站,受9級特大地震影響谜嫉,放射性物質(zhì)發(fā)生泄漏萎坷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一沐兰、第九天 我趴在偏房一處隱蔽的房頂上張望哆档。 院中可真熱鬧,春花似錦僧鲁、人聲如沸虐呻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至偶惠,卻和暖如春春寿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背忽孽。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工绑改, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人兄一。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓厘线,卻偏偏與公主長得像,于是被迫代替她去往敵國和親出革。 傳聞我的和親對象是個殘疾皇子造壮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 引出 ?請思考如下問題? –查詢所有員工的每個月工資總和骂束,平均工資耳璧? –查詢工資最高和最低的工資是多少? –查詢公...
    C_cole閱讀 7,290評論 0 3
  • 5.多表查詢 多表查詢 目的:從多張表獲取數(shù)據(jù) 前提:進(jìn)行連接的多張表中有共同的列 等連接 通過兩個表具有相同意義...
    喬震閱讀 1,237評論 0 0
  • 引言:當(dāng)Hibernate查詢部門對象時展箱,立即查詢并加載與之的員工對象旨枯,這查詢策略是立即加載策略。立即加載存在兩大...
    長著豬鼻子的怪獸閱讀 236評論 0 0
  • 多表連接初步 引出 ?思考如下問題混驰? –寫一條查詢語句攀隔,查詢員工姓名皂贩、部門名稱、工作地點(diǎn)昆汹? 寫一個查詢顯示員工姓名...
    C_cole閱讀 649評論 0 0
  • 畢業(yè)已經(jīng)也有一年多的時間了先紫,回想一下這一年里面自己有什么收獲,金錢上和畢業(yè)時候還是一樣緊張筹煮,去了8個多月的淮安遮精,剛...
    那年我19閱讀 154評論 0 0