2009-10-22 145 views
0

我有一個選擇查詢需要10分鐘完成,因爲它運行通過10M記錄。當我通過TOAD或使用普通JDBC連接的程序運行時,我得到了結果,但在運行使用Hibernate作爲ORM的Job時不會返回任何結果。它只是掛了...即使在45分鐘後?請幫忙休眠與Oracle JDBC問題

+2

你真的希望我們能給你答案嗎? – skaffman 2009-10-22 19:30:25

回答

0

你是說你試圖使用ORM像hibernate一樣檢索10M記錄嗎? 如果出現這種情況,您有一個重大問題,您需要重新設計您的應用程序,因爲這不會起作用,並且爲什麼它會掛起,我敢打賭,因爲它耗盡內存。

+0

對不起,查詢只返回滿足條件的記錄數,所以我們不把所有記錄都存入內存。查詢本身需要時間。鑑於此,這是一項批量工作,我們預計需要一些時間。但是一旦生成準備好的語句,即使在正常運行時或蟾蜍查詢(10分鐘)之後,我們也不會返回計數。 – vijay 2009-10-22 19:56:44

0

您是否爲Hibernate啓用了SQL輸出?您需要set hibernate.show_sql to true才能做到這一點。

完成後,將生成的SQL與您通過TOAD運行的SQL進行比較。他們究竟是是否相同?

我要在這裏冒險猜測,並說他們不是因爲一旦生成SQL,Hibernate沒有任何花哨 - 連接取自池;準備好的語句被創建並執行 - 所以它應該與JDBC沒有區別。

因此,最可能的問題是如何優化您的HQL。如果您需要任何幫助,您必須發佈相關的HQL以及適當的映射/表格模式。在查詢上運行解釋也會有所幫助。

+0

感謝您的建議,我在由Hibernate生成的TOAD中運行相同的查詢。 – vijay 2009-10-22 21:18:04

+0

你可以發佈查詢嗎? HQL和SQL?和你在Hibernate中運行它的代碼?我有最困難的時間想象會花更長的時間來運行**相同的**查詢。 – ChssPly76 2009-10-22 21:33:37

+0

感謝您回覆,我有一個Criteria對象,它轉換成SQL查詢。查詢是匹配條件的對象的計數。當我在數據庫中有50,000條記錄的開發環境中運行程序時,我得到結果。但是當我在Perf中運行相同的程序時。 env有10M記錄,查詢永遠不會回來。儘管從TOAD運行相同的查詢給出了結果。我的查詢是這樣的。 – vijay 2009-10-22 22:33:46