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

JPA原生查询如何使用DTO作为参数替代多个零散入参

问题原因

你遇到的Named parameter not bound : key.id1报错,是因为原生查询模式下,JPA默认不直接支持:参数名.属性这种嵌套参数绑定语法,无法自动识别参数下的属性字段。

解决方案

Spring Data JPA 本身支持直接传入DTO/复合对象作为查询参数,只需要改用SpEL表达式语法声明属性访问即可,修改后的代码如下:

@Query(value = "UPDATE #{#entityName} SET counter=counter+1 " +
        "WHERE id1=:#{#key.id1} AND id2=:#{#key.id2}", nativeQuery = true)
@Modifying
fun incrementCounter(@Param("key") key: EntityKey)

语法说明

  • :#{}是Spring Data JPA提供的SpEL扩展占位符,支持在JPQL、原生查询中执行表达式获取值
  • 表达式内的#key对应你用@Param("key")声明的参数名,后面直接拼接.加属性名即可读取对应字段值
  • 只要你的EntityKey类对应属性有公开的getter方法(Kotlin data class默认生成,无需额外处理)即可正常运行,不需要拆分多个零散参数传入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:15:03