Hibernate HQL中的子查詢

來源:互聯網
上載者:User

標籤:order   實體   div   creat   hiberna   索引   nat   from   index   

子查詢是SQL語句中非常重要的功能特性,它可以在SQL語句中利用另外一條SQL語句的查詢結果,在Hibernate中HQL查詢同樣對子查詢功能提供了支援。 如下面代碼所示:List list=session.createQuery(“from Customer c where 1<(select count(o) from c.orders o)”).list(); 上面的程式查詢訂單數超過1的所有客戶,因此和上面子查詢HQL語句對應的SQL語句為:Select * from Customer c where 1<(select count(o.id) from Order o where c.id=o.customer_ID); 如果子查詢返回多條記錄,則可以使用下面關鍵字:all:表示子查詢語句返回的所有記錄any:表示子查詢語句返回的任意一條結果some:與”any”等價in:與”=any”等價exists:表示子查詢語句至少返回一條記錄 例如:查詢存在一條訂單價格大於100的客戶From Customer c where 100<any(select o.price from c.orders o);如果在子查詢中操作集合,HQL提供了一組操縱集合的函數和屬性:size()函數和size屬性:獲得集合中元素的數量minIndex()函數和minIndex屬性:對於建立了索引的集合獲得最小索引值(關於集合索引參考第一部分映射實值型別集合)minElement()函數和minElement屬性:對於包含基本類型的元素集合,獲得集合中值最小的元素maxElement()函數和maxElement屬性:對於包含基本類型元素的集合,獲得集合中值最大的元素element()函數:獲得集合中所有元素 例如:查詢訂單數大於0的客戶From Customer c where size(c.orders)>0;或者From Customer c where c.orders.size>0; 以上HQL語句會產生類似如下的SQL語句:Select * from customer c where 0<(select count(o.id) from order where o. customer_ID =c.id); 註: 在HQL中子查詢必須出現在where子句中,而且必須用一對圓括弧括起來。為什麼必須要出現在where字句之後呢?其實我們大家仔細想一下也就知道了,在Hibernate中查詢的任何一個實體物件都要有據可循,這個“據”就是Hibernate的主設定檔,也就是說凡是出現在HQL from字句中的實體物件,都必須要在Hibernate主設定檔中有明確的配置。所以在Hibernate中無法支援SQL語句中的那種出現在from字句之後的那種動態視圖子查詢。

Hibernate HQL中的子查詢

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.