JPQL / HSQL更新有限制吗?

时间:2011-05-08 13:34:54

标签: java hibernate jpa hsqldb

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

以下是我要采取的步骤:

  1. 获取下一个序列号
  2. 选择前50条记录,并使用序列号更新@version like列。
  3. 现在选择那50个与该序列匹配的记录。
  4. 如何编写更新列的JPQL或HSQL查询,但将其自身限制为固定数量的记录?

2 个答案:

答案 0 :(得分:3)

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

可能的解决方法是:

  • 选择前50条记录(您可以在此处使用limit或更确切地说,setMaxResults())并在同一交易中逐一更新它们。
  • 选择第50条记录的PK(同时使用setMaxResults()setFirstResult())并使用entity.pk <= :pk条件执行批量更新。这假设您可以通过PK订购选择查询。

答案 1 :(得分:0)

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

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

使用版本2.3.3,您可以:

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