7

我在 DB2 中有 100,000 行要删除。我使用 Hibernate (HQL) 之类的东西 delete from than query.executeQuery()

在 HQL 中是否可以限制要删除的行数?例如:

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

2 回答 2

9

可悲的是,您不能使用 HQL 进行限制,query.setMaxResults(number)也不能使用UPDATEs 或DELETEs。您的选择是:

  • 迭代/加载每个对象并将其删除。呸!
  • 编写两个单独的 HQL 查询,其中第一个查询的结果被馈送到另一个查询(实际删除)。在您的情况下可能会也可能不会。
  • 使用原始 SQL/JDBC。
  • 进行两个查询:第一次仅查询具有有限结果集(在您的情况下为 100)的 ID(不加载实际对象)。第二个查询将删除WHERE someid IN (id1, id2, ..., id100)
于 2012-11-20T22:40:34.540 回答
0

不,很遗憾是不可能的。为此,根据您的用例,我会研究它是否值得以下几点之一:1select使用setMaxResults,然后迭代一个一个地删除delete(性能不佳)2 的元素使用session.createSQLQuery,创建一个 SQL 和您将能够使用limit

于 2015-08-11T12:49:51.530 回答