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

Spring Boot Native Query编写求助:按条件查询ClinicalData

问题分析与修复方案

你的原生查询存在两个核心问题:

  • 查询条件写死了patient_id=1和name='bp',完全没有使用方法传入的patientId和name参数,导致无论接口传什么值,都会查询固定条件的数据
  • 方法名包含OrderByMeasuredDateTime,但查询语句里没有添加排序逻辑,不符合方法的语义要求

修复后的代码

方式1:使用命名参数绑定(更清晰)

@Query(value = "SELECT id, name, value, measured_date_time FROM clinicaldata " +
               "WHERE patient_id = :patientId AND name = :name " +
               "ORDER BY measured_date_time", nativeQuery = true)
List<ClinicalData> findByPatientIdAndNameOrderByMeasuredDateTime(@Param("patientId") int patientId, @Param("name") String name);

方式2:使用位置参数绑定

@Query(value = "SELECT id, name, value, measured_date_time FROM clinicaldata " +
               "WHERE patient_id = ?1 AND name = ?2 " +
               "ORDER BY measured_date_time", nativeQuery = true)
List<ClinicalData> findByPatientIdAndNameOrderByMeasuredDateTime(int patientId, String name);

关键说明

  1. 参数绑定:通过:参数名(需配合@Param注解)或?索引的方式,把方法参数动态传入SQL,避免写死条件
  2. 排序逻辑:添加ORDER BY measured_date_time子句,匹配方法名中OrderByMeasuredDateTime的要求,确保返回结果按测量时间排序
  3. 字段匹配:确保SQL查询的字段和ClinicalData实体类的属性一一对应,比如measured_date_time要对应实体类里的measuredDateTime属性(如果开启了驼峰转下划线的自动映射配置则无需额外处理)

内容的提问来源于stack exchange,提问作者Candide Mboungou-Kimpolo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 10:45:46