2012-11-19 61 views
4

我有100,000行要在DB2中刪除。我使用休眠(HQL)類似於從query.executeQuery()刪除。如何刪除前100行?

是否有可能在HQL中限制要刪除的行數?例如:

query.setMaxRowTodelete(100); // this is just an example. 
query.executeQuery(); 

回答

6

Saddly,你不能用HQL限制和query.setMaxResults(number)不會UPDATE S或DELETE的工作。你的選擇是:

  • 遍歷/加載每個對象並刪除它。呸!
  • 寫入兩個單獨的HQL查詢,其中第一個查詢的結果被饋送到另一個查詢中(這實際上是刪除)。在你的情況下可能或不可能。
  • 使用原始SQL/JDBC。
  • 進行兩個查詢:只對第一個查詢ID(不加載實際對象)的結果集有限(在你的情況下爲100)。第二個查詢會刪除WHERE someid IN (id1, id2, ..., id100)
0

不,不幸的是不可能的。爲此,根據您的使用情況,我會研究是否值得使用以下幾點之一: 1到select使用setMaxResults,然後迭代一個一個地刪除delete(性能較差)的元素 2使用session.createSQLQuery,創建一個SQL,你將能夠使用limit