0
我希望你們原諒我......我知道這很簡單,但它證明是不可能的,以谷歌。Hibernate的HQL創建「任何」查詢
我想寫以下HQL查詢:「有沒有人的任何情況下,與NAME =‘鮑勃’」
我知道我可以做一個計數,但似乎像它會不必要地嚼起來的處理能力時,我實際上並不需要枚舉所有行。
什麼HQL查詢做到這一點?
我希望你們原諒我......我知道這很簡單,但它證明是不可能的,以谷歌。Hibernate的HQL創建「任何」查詢
我想寫以下HQL查詢:「有沒有人的任何情況下,與NAME =‘鮑勃’」
我知道我可以做一個計數,但似乎像它會不必要地嚼起來的處理能力時,我實際上並不需要枚舉所有行。
什麼HQL查詢做到這一點?
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();
沒有被加載到內存中,只是一個數據庫遊標打開。
內存中沒有加載任何內容,但在db上執行的是完整查詢?假設你有2億行 - 是否需要檢查所有行或迭代直到找到一行?看起來我應該能夠向服務器表示「我只想要第一個結果」。另外,SQL Server真的支持遊標嗎? MySQL的? –
從休眠的角度來看,你可以做到的最大限度。 MySQL,支持遊標,我現在沒有關於SQL Server。在數據庫級發生什麼,執行查詢的方式取決於數據庫。對於MySQL只似乎最好的解決辦法是這樣的:http://stackoverflow.com/questions/1676551/best-way-to-test-if-a-row-exists-in-a-mysql-table – dcernahoschi
嗯.. 。我也剛剛找到setMaxResults方法......我想知道是否會轉換爲限制查詢/無論服務器支持 –