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

Spring Boot中JPA调用TimescaleDB time_bucket参数传递报错求助

解决方案:JPA原生查询传递TimescaleDB time_bucket参数

问题原因

你把参数:bucket放在了单引号包裹的字符串:bucket minutes里,JPA不会将单引号内的内容识别为参数占位符,而是直接把整个字符串":bucket minutes"传给数据库,导致TimescaleDB无法解析这个无效的interval格式,所以报错。

两种正确的写法

方法1:用数字乘以基础interval(推荐)

直接将参数数值乘以interval '1 minute',这样JPA可以正确绑定参数,数据库会自动计算出对应的interval:

@Query("""select time_bucket(:bucket * interval '1 minute', ht.time) as bucket, avg(data) as value
from h_table ht
where
   ...
group by bucket""", nativeQuery=true)
fun getByDeviceAndCode(@Param("bucket") bucket:Int,
                       ...) : List<ResultData>

注:请将ht.time替换为你表中实际的时间字段名。

方法2:拼接字符串并转换为interval

通过concat函数把参数和单位拼接成合法的interval字符串,再强制转换为interval类型:

@Query("""select time_bucket(concat(:bucket, ' minutes')::interval, ht.time) as bucket, avg(data) as value
from h_table ht
where
   ...
group by bucket""", nativeQuery=true)
fun getByDeviceAndCode(@Param("bucket") bucket:Int,
                       ...) : List<ResultData>

两种方法都能让JPA正确传递参数,数据库解析出有效的interval,解决语法错误问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 03:35:17