【问题标题】:How do I delete only the top 100 rows?如何只删除前 100 行?
【发布时间】:2012-11-07 21:13:16
【问题描述】:

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

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

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

【问题讨论】:

    标签: hibernate hql limit


    【解决方案1】:

    遗憾的是,您不能使用 HQL 进行限制,query.setMaxResults(number) 将无法使用 UPDATEs 或 DELETEs。您的选择是:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-27
        • 2021-11-09
        • 2021-09-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多