2009-12-11 85 views
7

如果用戶按下「搜索」按鈕,然後他們決定做「其他」,我們必須取消已經運行的查詢。我如何取消休眠查詢

我們使用Hibernate(和Oracle)作爲持久性解決方案。休眠會話界面提供了一個cancelQuery()方法。經過一番測試,似乎cancelQuery()沒有效果。

有沒有人有這種Session#cancelQuery()方法的一些經驗?

謝謝!

+0

我發現cancelQuery方法只適用於應用程序正在等待數據庫開始返回結果。但是,一旦Hibernate從數據庫接收到結果集並開始將結果映射到對象,那麼它已經不起作用,並且這實際上是大部分性能開銷的地方。請參閱:http://stackoverflow.com/questions/28391785/outofmemoryerror-as-a-result-of-multiple-searches – Jewels 2015-02-12 12:10:49

回答

6

它有一個效果,但使用Oracle JDBC驅動程序,它只需要一些時間發生。等一兩分鐘。

如果你不能等待,那麼在後臺線程(連同會話)中移動cancel,並在你的主線程中請求一個新的Hibernate會話。您不能使用舊會話,直到cancelQuery()返回。