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 更新有限制?的主要内容,如果未能解决你的问题,请参考以下文章