2009-12-11 9 views
7

ユーザーが「検索」ボタンを押して「何か」を行うと決定した場合、実行中のクエリを取り消す必要があります。休止状態のクエリをキャンセルするには

私たちはHibernate(とOracle)を永続性ソリューションとして使用します。 Hibernate SessionインターフェイスはcancelQuery()メソッドを提供します。いくつかのテストの後、cancelQuery()は効果がないようです。

誰もこのSession#cancelQuery()メソッドでいくつかの経験がありますか?

ありがとうございました!

+0

cancelQueryメソッドは、データベースが結果を返すのをアプリケーションが待機している間だけ動作します。しかし、いったんHibernateがデータベースから結果セットを受け取ってから、結果をオブジェクトにマッピングするようになったら、それはすでに何の効果もありません。そして、これは実際にはパフォーマンスオーバーヘッドの大部分です。参照:http://stackoverflow.com/questions/28391785/outofmemoryerror-as-a-result-of-multiple-searches – Jewels

答えて

6

これは効果がありますが、Oracle JDBCドライバを使用すると、それには時間がかかります。ちょうど1,2分待ってください。

待つことができない場合は、バックグラウンドスレッド(セッションとともに)でキャンセルを移動し、メインスレッドで新しいHibernateセッションをリクエストしてください。 cancelQuery()が返されるまで古いセッションを使用することはできません。