2012-01-26 59 views
0

我希望你們原諒我......我知道這很簡單,但它證明是不可能的,以谷歌。Hibernate的HQL創建「任何」查詢

我想寫以下HQL查詢:「有沒有人的任何情況下,與NAME =‘鮑勃’」

我知道我可以做一個計數,但似乎像它會不必要地嚼起來的處理能力時,我實際上並不需要枚舉所有行。

什麼HQL查詢做到這一點?

回答

1
Query personsQuery = session.createQuery("from Person p where p.name = 'Bob'"); 
if(personsQuery.iterate().hasNext()) { 
    //there is at least one Bob 
} 

只有人的主鍵被加載到內存中。

ScrollableResultSet scroll = session.createQuery("from Person p where p.name = 'Bob'").scroll(); 

if(scroll.next()) { 
    //there is at least one Bob 
} 

scroll.close(); 

沒有被加載到內存中,只是一個數據庫遊標打開。

+0

內存中沒有加載任何內容,但在db上執行的是完整查詢?假設你有2億行 - 是否需要檢查所有行或迭代直到找到一行?看起來我應該能夠向服務器表示「我只想要第一個結果」。另外,SQL Server真的支持遊標嗎? MySQL的? –

+1

從休眠的角度來看,你可以做到的最大限度。 MySQL,支持遊標,我現在沒有關於SQL Server。在數據庫級發生什麼,執行查詢的方式取決於數據庫。對於MySQL只似乎最好的解決辦法是這樣的:http://stackoverflow.com/questions/1676551/best-way-to-test-if-a-row-exists-in-a-mysql-table – dcernahoschi

+0

嗯.. 。我也剛剛找到setMaxResults方法......我想知道是否會轉換爲限制查詢/無論服務器支持 –