JPQL/HSQL更新有限制吗?
我想更新 @Version 之类的列作为应用程序管理的悲观锁。
这些是我想要采取的步骤:
- 获取序列的下一个编号
- 选择前 50 条记录并使用序列号更新类似 @version 的列。
- 现在选择回与该序列匹配的 50 条记录。
如何编写 JPQL 或 HSQL 查询来更新列,但将其限制为固定数量的记录?
I want to update a @Version like column as an application managed pessimistic lock.
These are the steps I want to take:
- Get the next number of the sequence
- Select the first 50 records and update a @version like column with the number of the sequence.
- Now select back those 50 records matching that sequence.
How can one write a JPQL or HSQL query which updates a column but limits itself to a fixed number of records?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
一个人不能。事实上,除非使用支持
update ... limit X
表示法的 RDBMS,否则也无法在 SQL 中编写这样的查询 - 并非所有 RDBMS 都支持。可能的解决方法是:
limit
或更确切地说,setMaxResults()
)并逐一更新它们 - 当然,在同一事务中。setMaxResults()
和setFirstResult()
),并使用entity.pk <= :pk
执行批量更新> 条件。这假设您可以通过 PK 对选择查询进行排序。One cannot. In fact, one cannot write such a query in SQL either unless one happens to be working with RDBMS that supports
update ... limit X
notation - not all RDBMS do.Possible workarounds are:
limit
or, rather,setMaxResults()
here) and update them one by one - within the same transaction, of course.setMaxResults()
andsetFirstResult()
) and execute bulk update withentity.pk <= :pk
condition. This assumes that you're fine with ordering select query by PK.使用最新版本的 HSQLDB,您可以:
使用版本 2.3.3,您可以:
With recent versions of HSQLDB you can:
With version 2.3.3, you can: