国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

方便的HQL: Hibernate查詢語言

2019-11-18 12:57:44
字體:
來源:轉載
供稿:網友

  HQL: Hibernate查詢語言 Hibernate配備了一種非常強大的查詢語言,這種語言看上去很像SQL。但是不要被語法結構 上的相似所迷惑,HQL是非常有意識的被設計為完全面向對象的查詢,它可以理解如繼續、多態 和關聯之類的概念。
  
  15.1. 大小寫敏感性問題
  
  除了java類與屬性的名稱外,查詢語句對大小寫并不敏感。 所以 SeLeCT 與 sELEct 以及 SELECT 是相同的,但是 org.hibernate.eg.FOO 并不等價于 org.hibernate.eg.Foo 并且 foo.barSet 也不等價于 foo.BARSET。
  
  本手冊中的HQL要害字將使用小寫字母. 很多用戶發現使用完全大寫的要害字會使查詢語句 的可讀性更強, 但我們發現,當把查詢語句嵌入到Java語句中的時候使用大寫要害字比較難看。
  
  15.2. from子句
  
  Hibernate中最簡單的查詢語句的形式如下:
  
  代碼內容
  from eg.Cat
  
  該子句簡單的返回eg.Cat類的所有實例。 通常我們不需要使用類的全限定名, 因為 auto-import(自動引入) 是缺省的情況。 所以我們幾乎只使用如下的簡單寫法:
  
  代碼內容
  from Cat
  
  大多數情況下, 你需要指定一個別名, 原因是你可能需要 在查詢語句的其它部分引用到Cat
  
  代碼內容
  from Cat as cat
  
  這個語句把別名cat指定給類Cat 的實例, 這樣我們就可以在隨后的查詢中使用此別名了。 要害字as 是可選的,我們也可以這樣寫:
  
  代碼內容
  from Cat cat
  
  子句中可以同時出現多個類, 其查詢結果是產生一個笛卡兒積或產生跨表的連接。
  from Formula, Parameter
  from Formula as form, Parameter as param
  
  查詢語句中別名的開頭部分小寫被認為是實踐中的好習慣, 這樣做與Java變量的命名標準保持了一致 (比如,domesticCat)。
  
  15.3. 關聯(Association)與連接(Join)
  
  我們也可以為相關聯的實體甚至是對一個集合中的全部元素指定一個別名, 這時要使用要害字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(內連接)
  left outer join(左外連接)
  right outer join(右外連接)
  full join (全連接,并不常用)
  
  語句inner join, left outer join 以及 right outer join 可以簡寫。
  
  代碼內容
  from Cat as cat
  join cat.mate as mate
  left join cat.kittens as kitten
  
  還有,一個"fetch"連接答應僅僅使用一個選擇語句就將相關聯的對象或一組值的集合隨著他們的父對象的初始化而被初始化,這種方法在使用到集合的情況下尤其有用,對于關聯和集合來說,它有效的代替了映射文件中的外聯接 與延遲聲明(lazy declarations). 查看 第 20.1 節 “ 抓取策略(Fetching strategies) ” 以獲得等多的信息。
  
  代碼內容
  from Cat as cat
  inner join fetch cat.mate
  left join fetch cat.kittens
  
  一個fetch連接通常不需要被指定別名, 因為相關聯的對象不應當被用在 where 子句 (或其它任何子句)中。同時,相關聯的對象 并不在查詢的結果中直接返回,但可以通過他們的父對象來訪問到他們。
  
  注重fetch構造變量在使用了scroll() 或 iterate()函數 的查詢中是不能使用的。最后注重,使用full join fetch 與 right join fetch是沒有意義的。
  
  假如你使用屬性級別的延遲獲取(lazy fetching)(這是通過重新編寫字節碼實現的),可以使用 fetch all PRoperties 來強制Hibernate立即取得那些原本需要延遲加載的屬性(在第一個查詢中)。
  
  代碼內容
  from Document fetch all properties order by name
  from Document doc fetch all properties where lower(doc.name) like ’%cats%’

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 绥化市| 呼伦贝尔市| 广德县| 旅游| 库车县| 永寿县| 辽宁省| 大新县| 福泉市| 民勤县| 浑源县| 靖宇县| 云浮市| 荥经县| 丰城市| 平原县| 南乐县| 常熟市| 那曲县| 福建省| 电白县| 迁安市| 淮滨县| 鄱阳县| 惠来县| 云安县| 武鸣县| 增城市| 长顺县| 临武县| 绥江县| 浪卡子县| 客服| 广平县| 麦盖提县| 青神县| 福贡县| 彭阳县| 英山县| 浙江省| 洞口县|