溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Hibernate查詢語言怎么使用

發(fā)布時(shí)間:2021-12-06 09:11:45 來源:億速云 閱讀:110 作者:iii 欄目:編程語言

這篇文章主要介紹“Hibernate查詢語言怎么使用”,在日常操作中,相信很多人在Hibernate查詢語言怎么使用問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Hibernate查詢語言怎么使用”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

Hibernate配備了一種非常強(qiáng)大的Hibernate查詢語言,這種語言看上去很像SQL。本文主要介紹大小寫敏感性問題、from子句、關(guān)聯(lián)(Association)與連接(Join)等。但是不要被語法結(jié)構(gòu) 上的相似所迷惑,HQL是非常有意識(shí)的被設(shè)計(jì)為完全面向?qū)ο蟮牟樵?,它可以理解如繼承、多態(tài) 和關(guān)聯(lián)之類的概念。

1. 大小寫敏感性問題

除了Java類與屬性的名稱外,查詢語句對(duì)大小寫并不敏感。 所以 SeLeCT 與 sELEct 以及 SELECT 是相同的,但是 org.hibernate.eg.FOO 并不等價(jià)于 org.hibernate.eg.Foo 并且 foo.barSet 也不等價(jià)于 foo.BARSET。

本手冊(cè)中的HQL關(guān)鍵字將使用小寫字母. 很多用戶發(fā)現(xiàn)使用完全大寫的關(guān)鍵字會(huì)使查詢語句 的可讀性更強(qiáng), 但我們發(fā)現(xiàn),當(dāng)把查詢語句嵌入到Java語句中的時(shí)候使用大寫關(guān)鍵字比較難看。

2. from子句

最簡(jiǎn)單的Hibernate查詢語句的形式如下:

from eg.Cat

該子句簡(jiǎn)單的返回eg.Cat類的所有實(shí)例。 通常我們不需要使用類的全限定名, 因?yàn)?auto-import(自動(dòng)引入) 是缺省的情況。 所以我們幾乎只使用如下的簡(jiǎn)單寫法:

from Cat

大多數(shù)情況下, 你需要指定一個(gè)別名, 原因是你可能需要 在Hibernate查詢語言的其它部分引用到Cat

om Cat as cat

這個(gè)語句把別名cat指定給類Cat 的實(shí)例, 這樣我們就可以在隨后的查詢中使用此別名了。 關(guān)鍵字as 是可選的,我們也可以這樣寫:

from Cat cat

子句中可以同時(shí)出現(xiàn)多個(gè)類, 其查詢結(jié)果是產(chǎn)生一個(gè)笛卡兒積或產(chǎn)生跨表的連接。

from Formula, Parameter  from Formula as form, Parameter as param

    查詢語句中別名的開頭部分小寫被認(rèn)為是實(shí)踐中的好習(xí)慣, 這樣做與Java變量的命名標(biāo)準(zhǔn)保持了一致 (比如,domesticCat)。

    3. 關(guān)聯(lián)(Association)與連接(Join)

    Hibernate查詢語言,我們也可以為相關(guān)聯(lián)的實(shí)體甚至是對(duì)一個(gè)集合中的全部元素指定一個(gè)別名, 這時(shí)要使用關(guān)鍵字join。

    from Cat as cat       inner join cat.mate as mate      left outer join cat.kittens as kitten  from Cat as cat left join cat.mate.kittens as kittens  from Formula form full join form.parameter param

    受支持的連接類型是從ANSI SQL中借鑒來的。

    inner join(內(nèi)連接)

    left outer join(左外連接)

    right outer join(右外連接)

    full join (全連接,并不常用)

    語句inner join, left outer join 以及 right outer join 可以簡(jiǎn)寫。

    from Cat as cat       join cat.mate as mate      left join cat.kittens as kitten

    還有,一個(gè)"fetch"連接允許僅僅使用一個(gè)選擇語句就將相關(guān)聯(lián)的對(duì)象或一組值的集合隨著他們的父對(duì)象的初始化而被初始化,這種方法在使用到集合的情況下尤其有用,對(duì)于關(guān)聯(lián)和集合來說,它有效的代替了映射文件中的外聯(lián)接 與延遲聲明(lazy declarations). 查看 第 19.1 節(jié) “ 抓取策略(Fetching strategies) ” 以獲得等多的信息。

    from Cat as cat       inner join fetch cat.mate      left join fetch cat.kittens

    一個(gè)fetch連接通常不需要被指定別名, 因?yàn)橄嚓P(guān)聯(lián)的對(duì)象不應(yīng)當(dāng)被用在 where 子句 (或其它任何子句)中。同時(shí),相關(guān)聯(lián)的對(duì)象 并不在查詢的結(jié)果中直接返回,但可以通過他們的父對(duì)象來訪問到他們。

    注意,在目前的版本中,一個(gè)查詢中只有一個(gè)集合角色能被連接取得(超過一個(gè)的角色將會(huì)導(dǎo)致形成一個(gè)笛卡兒積)。 同時(shí)注意fetch構(gòu)造變量在使用了scroll() 或 iterate()函數(shù) 的查詢中是不能使用的。***注意,使用full join fetch 與 right join fetch是沒有意義的。

    如果你使用屬性級(jí)別的延遲獲?。╨azy fetching)(這是通過重新編寫字節(jié)碼實(shí)現(xiàn)的),可以使用 fetch all properties 來強(qiáng)制Hibernate立即取得那些原本需要延遲加載的屬性(在***個(gè)查詢中)。

    from Document fetch all properties order by name  from Document doc fetch all properties where lower(doc.name) like '%cats%'

    到此,關(guān)于“Hibernate查詢語言怎么使用”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI