JPQL/HSQL 更新有限制?

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

【参考方案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

【讨论】:

以上是关于JPQL/HSQL 更新有限制?的主要内容,如果未能解决你的问题,请参考以下文章

限制用户从 iTunes 下载更新的版本

如何限制WIKI系统的更新,加入审核功能

定期付款和更新定期付款资料限制

有关 Service Fabric 网格限制的任何更新

限制 javafx gui 更新

Mysql 更新字段时,若长度超出限制