【问题标题】:JPQL/HSQL update with a limit?JPQL/HSQL 更新有限制?
【发布时间】:2011-05-08 13:34:53
【问题描述】:

我想将类似@Version 的列更新为应用程序管理的悲观锁。

这些是我想要采取的步骤:

  1. 获取序列的下一个编号
  2. 选择前 50 条记录并使用序列号更新类似 @version 的列。
  3. 现在选择与该序列匹配的 50 条记录。

如何编写 JPQL 或 HSQL 查询来更新列但将自身限制为固定数量的记录?

【问题讨论】:

    标签: java hibernate jpa hsqldb


    【解决方案1】:

    不能。事实上,除非碰巧使用支持update ... limit X 表示法的 RDBMS,否则不能在 SQL 中编写这样的查询——并非所有 RDBMS 都这样做。

    可能的解决方法是:

    • 选择前 50 条记录(您可以在此处使用 limit 或更确切地说,setMaxResults())并逐一更新它们 - 当然是在同一个事务中。
    • 选择第50条记录的PK(同时使用setMaxResults()setFirstResult())并使用entity.pk <= :pk条件执行批量更新。这假设您可以按 PK 排序选择查询。

    【讨论】:

      【解决方案2】:

      使用最新版本的 HSQLDB,您可以:

      UPDATE atable SET ... WHERE ROWNUM() <=50 [AND ...]
      

      使用 2.3.3 版,您可以:

      UPDATE atable SET ... WHERE ... LIMIT 50
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-01-07
        • 1970-01-01
        • 2018-10-10
        • 2011-08-26
        • 2018-09-03
        • 2011-07-07
        • 2012-03-14
        相关资源
        最近更新 更多