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

简单SQL查询对应的JPA Query编写 含IN嵌套子查询示例

对应SQL的JPA Query实现方案

以下给出两种常用实现方式,你可以根据业务场景选择:

方式1:JPQL查询(面向实体,兼容所有支持JPA的数据库)

前提:你已经定义好了对应两张表的实体类:TableA 映射tableA表,主键属性为id;TableB映射tableB表,关联字段对应属性为extId。
写法如下:

// 写在TableA对应的Repository接口中
@Query("SELECT a FROM TableA a WHERE a.id IN (SELECT DISTINCT b.extId FROM TableB b)")
List<TableA> findAllQualifiedTableA();

如果需要分页,直接追加Pageable类型的入参,返回值替换为Page<TableA>即可自动适配分页逻辑。

方式2:原生SQL查询(和你提供的原SQL完全一致,适配复杂特殊场景)

如果子查询逻辑比较复杂,或者有数据库特有的语法需要用,可以直接走原生SQL查询:

// 写在TableA对应的Repository接口中
@Query(value = "SELECT * FROM tableA a WHERE id IN (SELECT DISTINCT extId FROM tableB)", nativeQuery = true)
List<TableA> findAllQualifiedTableAByNative();

注意事项

  • 原生SQL必须显式声明nativeQuery = true参数,否则JPA会按照JPQL语法解析,抛出语法错误
  • 如果两张表的关联逻辑固定,也可以直接在实体类中配置关联注解,用关联查询替代子查询,性能表现更优
  • 需要传入动态参数时,可以用?1占位符对应方法第一个参数,或者用@Param("参数名")绑定命名参数,灵活适配业务变化

内容的提问来源于stack exchange,提问作者A K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:18:02