spring-data-jpa 如何在Postgres中查询Json(无键值)

0mkxixxg  于 2022-11-10  发布在  Spring
关注(0)|答案(1)|浏览(160)

我当前正在处理一个需要存储技能属性项目

@TypeDef(name = "json", typeClass = JsonStringType.class)

@Type(type = "json")
@Column(columnDefinition = "json")
private List<String> skills;

转换为Postgres中的文本数据类型(但这将被保存为有效的JSON)。
填充此属性的示例数据如下

.skills(asList(
            "Java".concat(String.valueOf(i)), 
            "Python".concat(String.valueOf(i)),
            "DotNet".concat(String.valueOf(i))))

数据库中存储的值是["Java9","Python9","DotNet9"]。我知道这不是做这项工作的正确方法,但我只想知道是否有任何方法可以在JPA中查询,我可以使用本地JPA函数从skills属性中检索Java9,或者甚至可以编写一个SQL查询,将这些数据返回给我。我知道如何从JSON对象中检索数据,该对象具有以下链接的键值对'https://www.postgresqltutorial.com/postgresql-json/',但这不适用于我的情况,因为我的JSON(某种程度上)没有键值对。
另外,如果我将PG中的数据类型保持为Text,则允许插入记录,如果我们将数据类型更改为JSON,则会抛出异常。
问题陈述:有没有什么方法可以让我在一个逗号分隔的值列表中查询一个文本(如JSON)(在这个特定的例子中是技巧)。感谢你的研究。

avkwfej4

avkwfej41#

如果值以数组的形式存储在postgresql〉= 9.4的json字段中,则可以使用->>操作符通过索引以文本的形式访问它们(参见documentation)。
因此,如果您的数据位于mytable中,如下所示(valjson类型的列)
| 标识符|瓦尔|
| - -|- -|
| 一个|[“Java 9”、“Python 9”、“点网络9”]|
则语句

SELECT val->>0 as val
  FROM mytable
 WHERE id = 1

将返回
| 瓦尔|
| - -|
| Java 9语言|
有关完整示例,请参见this db<>fiddle

相关问题