我在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'
7条答案
按热度按时间cfh9epnr1#
我发现Spring Data 中的Specification api非常有用。
假设我们有一个名为
Product
的实体和一个名为title
的JSON(B)类型的属性。我假设此属性包含不同语言的产品标题。例如:
{"EN":"Multicolor LED light", "EL":"Πολύχρωμο LED φώς"}
.下面的源代码通过作为参数传递的标题和区域设置查找一个(如果不是唯一字段,则查找多个)产品。
您可以在这里找到关于如何使用Spring Data 的另一个答案。
希望能有所帮助。
63lcw9qa2#
如果由于某种原因,运算符被转换成问号,那么您应该尝试使用函数来代替。您可以在psql控制台中使用
\doS+ #>>
找到相应的函数。它告诉我们调用的函数是jsonb_extract_path_text
。这将使您的查询:pdkcd3nj3#
也许这是一个老主题,但我在这里把jsonb中的搜索按字段使用spring规范。
如果要使用“LIKE”进行搜索,则需要使用以下代码创建like析取:
然后,假设你的对象中有一个jsonb字段是address,address有5个字段,要在所有这些字段中搜索,你需要为所有字段添加“LIKE”表达式:
其中cb是相同的criteriaBuilder。%searchKey%是您要在地址字段中搜索的内容。
希望这对你有帮助。
wyyhbhjk4#
您还可以使用
FUNC
JPQL关键字来调用自定义函数,而不使用本地查询。像这样的东西,
tjvv9vkg5#
我建议不要采用这种方式,我更喜欢采用通用的CRUD方式(也在为Spring Data Rest maven插件以StrongLoop Loopback的方式处理高级自动生成的DAO方法,但它目前只是实验性的)。但是对于这个JSON,现在该怎么做...我正在通过@Document注解寻找类似于Spring Data中MongoDB JSON处理的东西,然而,这还不是可用的。但是还有其他的方法:-)
一般来说,它是关于实现JSON用户类型(UserType接口):
最后,您需要使用实现的用户类型的规范来增强JPA类:
看另一个相关的文章在这里:Mapping PostgreSQL JSON column to Hibernate value type
完整的实施示例可从以下网址获得:
类似但略有不同的示例如下:http://www.wisely.top/2017/06/27/spring-data-jpa-postgresql-jsonb/?d=1
dhxwm5r46#
分享我自己的例子,因为我努力分解提供的答案,以满足我的特定需求。希望这能帮助其他人。我的例子是在groovy中,我正在与postgres SQL数据库集成。这是一个简单的例子,说明如何在名为“name”的字段上搜索JSON列,并使用分页。
JSON支持类
实体类:
规范类
存储库
用法
zkure5ic7#
在 postgres DB 中 创建 表
中 的 每 一 个
将 数据 插入 表格
格式
检查 表 中 的 数据 :
格式
Spring 启动 Java 项目 Java 版本 :11 Spring 版 :2.7.1
Maven 依赖 于 POM.xml 文件 。 对于 postgres JOSNB , 我们 需要 特定 的
vladmihalcea 依赖 项 2.14.0 版
格式
格式
格式
格式
格式
格式