2012-01-26 11 views
0

私はあなたが私を許してくれることを願っています...これはシンプルですが、Googleには不可能であることが分かります。Hibernate hql create 'Any' query

私は、次のHQLクエリを書きたい:

「人物のインスタンスのいずれかが名前= 『ボブ』であります」私は、カウントを行うことができます知っているが、それは不必要時に処理能力をかむますようにそれはそうです私は実際にすべての行を列挙する必要はありません。

これを行うための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で実行される完全なクエリですか? 200億行があるとします。すべてを確認するか、見つかるまで繰り返してください。サーバーに "私は最初の結果のみを必要とする"ことを示すことができるはずです。また、カーソルは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

hmm ..私はsetMaxResultsメソッドを見つけました...もしそれが制限クエリ/サーバがサポートしているものに変換されるのではないかと思います。 –