You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Data JPA如何无需编写SQL实现SELECT FOR UPDATE查询

解决方案

你可以直接给目标方法添加@Lock(LockMode.PESSIMISTIC_WRITE)注解,无需编写@Query语句,Spring Data JPA会自动为这个派生查询方法生成带SELECT FOR UPDATE的SQL:

@Lock(LockMode.PESSIMISTIC_WRITE)
Optional<MyStuff> findByFooAndBarForUpdate(Foo foo, Bar bar);

原理说明

Spring Data JPA的查询派生机制会根据方法名里的ByFooAndBar部分自动解析生成对应的WHERE条件;而@Lock(LockMode.PESSIMISTIC_WRITE)注解会告诉JPA在执行查询时添加悲观写锁,最终生成的SQL会包含FOR UPDATE子句(不同数据库的语法可能略有差异,但Spring Data JPA会自动适配)。

额外注意

  • 确保你的数据库支持悲观锁(MySQL、PostgreSQL等主流数据库均支持);
  • 如果需要其他锁类型,可以替换LockMode枚举值,比如PESSIMISTIC_READ对应共享锁;
  • 方法名里的ForUpdate只是语义化命名,Spring Data JPA不会解析这部分,你也可以改用findByFooAndBarWithLock这类命名,只要核心查询条件部分(ByFooAndBar)符合派生规则即可。

内容的提问来源于stack exchange,提问作者Archimedes Trajano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 21:29:55