【问题标题】:How can I limit the number of rows updated in a JPQL query?如何限制 JPQL 查询中更新的行数?
【发布时间】:2011-04-30 03:31:42
【问题描述】:

我想将此更新查询限制为仅更新 5 行:

Query updateQuery = em.createQuery("update Entity e SET e.myVar = 1");
updateQuery.setMaxResults(5).executeUpdate();

setMaxResults 似乎没有完成这项工作。我怎样才能在 jpql 中做到这一点?

【问题讨论】:

    标签: java jpql


    【解决方案1】:

    如果可移植性不是问题,那么您可以使用特定于数据库的本机查询。

    • 甲骨文:em.createNativeQuery("update TableName SET myVar = 1 where id IN (SELECT id FROM TableName WHERE ROWNUM <= 5)").executeUpdate();

    • MySql:em.createNativeQuery("update TableName SET myVar = 1 where id IN (SELECT id FROM TableName LIMIT 5)").executeUpdate();

    ROWNUMLIMIT 分别用于限制 Oracle 和 MySql 查询中的结果数。

    尚未提及您使用的是哪个数据库。提供的示例代码可能会对您有所帮助,请进行相应的更改。

    【讨论】:

    • 这是一个有用的答案,但我真的需要一种独立于平台的方式来做到这一点。
    • 可以尝试使用子查询的 Criteria API,在子查询中您可以限制 setMaxResults(size) 获取的结果数量,然后在主查询中更新这些记录。否则,没有它可以进行两个查询,一个用于检索特定数量的记录然后更新它们。
    猜你喜欢
    • 2010-11-17
    • 1970-01-01
    • 2014-01-07
    • 2019-07-16
    • 1970-01-01
    • 2011-08-26
    • 2016-02-29
    相关资源
    最近更新 更多