我当前正在处理一个需要存储技能属性项目
@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)(在这个特定的例子中是技巧)。感谢你的研究。
1条答案
按热度按时间avkwfej41#
如果值以数组的形式存储在postgresql〉= 9.4的
json
字段中,则可以使用->>
操作符通过索引以文本的形式访问它们(参见documentation)。因此,如果您的数据位于
mytable
中,如下所示(val
是json
类型的列)| 标识符|瓦尔|
| - -|- -|
| 一个|[“Java 9”、“Python 9”、“点网络9”]|
则语句
将返回
| 瓦尔|
| - -|
| Java 9语言|
有关完整示例,请参见this db<>fiddle。