JPQL/HSQL更新有限制吗?

发布于 2024-11-05 22:23:05 字数 211 浏览 0 评论 0原文

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

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

  1. 获取序列的下一个编号
  2. 选择前 50 条记录并使用序列号更新类似 @version 的列。
  3. 现在选择回与该序列匹配的 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:

  1. Get the next number of the sequence
  2. Select the first 50 records and update a @version like column with the number of the sequence.
  3. 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

淡水深流 2024-11-12 22:23:05

一个人不能。事实上,除非使用支持 update ... limit X 表示法的 RDBMS,否则也无法在 SQL 中编写这样的查询 - 并非所有 RDBMS 都支持。

可能的解决方法是:

  • 选择前 50 条记录(您可以在此处使用 limit 或更确切地说,setMaxResults())并逐一更新它们 - 当然,在同一事务中。
  • 选择第 50 条记录的 PK(同时使用 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:

  • Select first 50 records (you can use limit or, rather, setMaxResults() here) and update them one by one - within the same transaction, of course.
  • Select PK of the 50th record (using both setMaxResults() and setFirstResult()) and execute bulk update with entity.pk <= :pk condition. This assumes that you're fine with ordering select query by PK.
花间憩 2024-11-12 22:23:05

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

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

使用版本 2.3.3,您可以:

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

With recent versions of HSQLDB you can:

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

With version 2.3.3, you can:

UPDATE atable SET ... WHERE ... LIMIT 50
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文