2
我想更新@Version像列作爲應用程序管理的悲觀鎖。帶有限制的JPQL/HSQL更新?
這些是我想要採取的步驟:
- 獲取序列
- 下一個號碼選擇前50條記錄,並與序列的數量更新柱狀一個@version。
- 現在選擇那些與該序列匹配的50條記錄。
如何寫一個JPQL或HSQL查詢更新一列,但限制自己的固定數量的記錄?
我想更新@Version像列作爲應用程序管理的悲觀鎖。帶有限制的JPQL/HSQL更新?
這些是我想要採取的步驟:
如何寫一個JPQL或HSQL查詢更新一列,但限制自己的固定數量的記錄?
一個不能。實際上,不能在SQL中編寫這樣的查詢,除非有人正在使用支持update ... limit X
表示法的RDBMS - 並非所有RDBMS都這樣做。
可能的解決方法是:
limit
,或者更確切地說,這裏setMaxResults()
)和更新逐一 - 在同一事務中,當然。setMaxResults()
和setFirstResult()
),並使用entity.pk <= :pk
條件執行批量更新。這假定你可以通過PK來訂購選擇查詢。隨着最新版本的HSQLDB,您可以:
UPDATE atable SET ... WHERE ROWNUM() <=50 [AND ...]
隨着2.3.3版本中,您可以:
UPDATE atable SET ... WHERE ... LIMIT 50