我在Postgres表order_information_table
中有一个JSONB列order_information
,数据如下:
{
"response_list": [
{
"interest": 5,
"number": "12221",
"amount": 1200
},
{
"interest": 1,
"number": "12229",
"amount": 800
},
{
"interest": 2,
"number": "12227",
"amount": 2500
}
]
}
字符串
我希望能够通过搜索JSONB列值的number
字段来获取数据库记录。
当我使用一个带有硬编码数字值的原生查询时,我看到了结果:
@Query("select * from order_information_table " +
"where order_information -> 'response_list' @> '[{\"number\": \"12221\"}]'",
nativeQuery = true)
fun retrieveOrdersForNumber(
@Param("number") number: String
): List<OrderInformation>
型
但是当我尝试使用参数时,它不起作用:
@Query("select * from order_information_table " +
"where order_information -> 'response_list' @> '[{\"number\": \":number\"}]'",
nativeQuery = true)
fun retrieveOrdersForNumber(
@Param("number") number: String
): List<OrderInformation>
型
为什么参数:number
没有被替换为值?
有没有可能使用JPQL查询而不是使用本机查询?
2条答案
按热度按时间piv4azn71#
既然
number
是第一个参数,为什么不将'[{\"number\": \":number\"}]'
改为'[{\"number\": ?1}]'
参见此处:https://www.baeldung.com/spring-data-jpa-query#2-native-2
已编辑
经过更多的阅读,我认为错误是json部分被引用。
既然你使用的是原生查询,也许你应该尝试使用JSON创建函数
字符串
在psql中运行下面的json函数,得到如下结果:
型
ecbunoof2#
感谢Laurent Schoelens,这是使用JSON创建函数的原生SQL查询:
字符串
这个原生SQL查询可以在Spring Data中执行,如下所示:
型
我认为这个查询不可能有JPQL查询。