我在针对 postgres 9.4 实例获取此本机查询时遇到问题。
我的存储库有一个方法:
@Query(value = "SELECT t.* " +
"FROM my_table t " +
"WHERE t.field_1 = ?1 " +
"AND t.field_2 = 1 " +
"AND t.field_3 IN ?2 " +
"AND t.jsonb_field #>> '{key,subkey}' = ?3",
nativeQuery = true)
List<Entity> getEntities(String field1Value,
Collection<Integer> field3Values,
String jsonbFieldValue);
但日志显示:
SELECT t.* FROM my_table t
WHERE t.field_1 = ?1
AND t.field_2 = 1
AND t.field_3 IN ?2
AND t.jsonb_field ? '{key,subkey}' = ?3
我得到这个例外:
内部异常:org.postgresql.util.PSQLException:没有为参数 2 指定值。
我在方法调用之前直接记录了参数,它们都已提供。
我不确定为什么 #>>
?
。我需要转义 #>>
吗?我是否需要为 IN
格式化集合?我需要转义 json 路径吗?
当我直接对数据库执行查询时,它起作用了。例子:
SELECT *
FROM my_table t
WHERE t.field_1 = 'xxxx'
AND t.field_2 = 1
AND t.field_3 IN (13)
AND t.jsonb_field #>> '{key,subkey}' = 'value'
原文由 Josh C. 发布,翻译遵循 CC BY-SA 4.0 许可协议
我发现来自 spring 数据的 Specification api 非常有用。
假设我们有一个名称为
Product
的实体和一个名称为title
的 JSON(B) 类型的属性。我假设此属性包含不同语言的产品标题。例如:
{"EN":"Multicolor LED light", "EL":"Πολύχρωμο LED φώς"}
。下面的源代码通过作为参数传递的标题和区域设置找到一个(或更多,如果它不是唯一字段)产品。
您可以 在此处 找到有关应如何使用 Spring Data 的方式的另一个答案。
希望有所帮助。