自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

簡(jiǎn)述Hibernate部分查詢語言(一)

開發(fā) 后端
Hibernate配備了一種非常強(qiáng)大的Hibernate查詢語言,這種語言看上去很像SQL。但是不要被語法結(jié)構(gòu) 上的相似所迷惑,HQL是非常有意識(shí)的被設(shè)計(jì)為完全面向?qū)ο蟮牟樵儯衫斫馊缋^承、多態(tài) 和關(guān)聯(lián)之類的概念。

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查詢語句的形式如下:

  1. from eg.Cat 

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

  1. from Cat 

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

  1. om Cat as cat 

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

  1. from Cat cat 

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

  1. from Formula, Parameter  
  2. 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。

    1. from Cat as cat   
    2.     inner join cat.mate as mate  
    3.     left outer join cat.kittens as kitten  
    4. from Cat as cat left join cat.mate.kittens as kittens  
    5. 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)寫。

    1. from Cat as cat   
    2.     join cat.mate as mate  
    3.     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) ” 以獲得等多的信息。

    1. from Cat as cat   
    2.     inner join fetch cat.mate  
    3.     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è)查詢中)。

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

    【編輯推薦】

    1. 簡(jiǎn)述Hibernate部分查詢語言(二)
    2. Hibernate的重要技術(shù)簡(jiǎn)介
    3. Struts-Spring-Hibernate案例
    4. Hibernate Sessin接口常用方法
    5. Hibernate事務(wù)全面介紹
    責(zé)任編輯:仲衡 來源: redsaga
    相關(guān)推薦

    2009-09-24 10:35:10

    Hibernate查詢

    2009-09-23 09:16:25

    Hibernate復(fù)合

    2009-09-25 16:57:49

    Hibernate查詢

    2009-09-29 16:29:40

    Hibernate查詢

    2009-09-24 11:17:32

    Hibernate查詢

    2009-09-29 16:41:58

    Hibernate S

    2009-09-25 12:31:13

    Hibernate映射

    2009-09-28 13:45:59

    Hibernate歷史

    2009-09-29 17:22:30

    Hibernate S

    2009-09-29 15:58:22

    Hibernate映射

    2009-09-28 11:12:52

    Hibernate O

    2009-09-29 10:37:29

    Hibernate持久

    2011-03-24 11:37:41

    Hibernate

    2009-09-22 16:04:50

    Hibernate連接

    2009-09-24 17:28:29

    Hibernate S

    2009-09-29 09:44:52

    Hibernate事務(wù)

    2009-06-26 16:09:21

    Hibernate查詢HQL

    2009-09-25 14:04:09

    Hibernate eHibernate h

    2010-04-21 10:22:25

    Unix 命令

    2009-06-17 14:41:57

    Hibernate查詢
    點(diǎn)贊
    收藏

    51CTO技術(shù)棧公眾號(hào)