微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 JPA 原生查询在 jsonbJSON 数组列中查询

如何解决使用 JPA 原生查询在 jsonbJSON 数组列中查询

我正在使用 JPA,其中实体之一包含 user_details (jsonb) 列。

下面是我要查询user_details json 数组数据。

[{
    "user": "test1","email": "test1@gmail.com"
},{
    "user": "test2","email": "test2@gmail.com"
}]

postgres 客户端中,下面的查询工作正常。

SELECT * FROM table1 WHERE "user_details" @> '[{"email": "test1@gmail.com"}]';

在@Repository 中也是如此,我想通过本机查询实现,其中电子邮件值(test1@gmail.com) 是动态的。这是我的代码

1. @Query(value ="select * from table1 WHERE user_details @> '[{\"email\": :email}]'",nativeQuery = true)
List<Entity> findByEmail(@Param("email") String email);

错误 json 类型的输入语法无效

详细信息:预期的 JSON 值,但找到了“:”。

其中:JSON 数据,第 1 行:[{"email":...

2. @Query(value ="select * from table1 WHERE user_details @> '[{\"email\": ?1}]'",nativeQuery = true)
List<Entity> findByEmail(String email);

错误 json 类型的输入语法无效

细节:令牌“?”无效。

哪里:JSON 数据,第 1 行:[{"email": ?...

3. @Query(value ="select * from table1 WHERE user_details @> :param",nativeQuery = true)
List<Entity> findByEmail(@Param("param") String param); (i.e. param= "'[{ \"email\" : \"test1@gmail.com\"}]'")

错误 运算符不存在:jsonb @> 字符变化

提示:没有运算符匹配给定的名称和参数类型。您可能需要添加显式类型转换。

已编辑:

4. @Query(nativeQuery = true,value = "select * from table1 where jsonb_contains(user_details,:param )") (i.e. param= "'[{ \"email\" : \"test1@gmail.com\"}]'")
List<Entity> findByEmail(@Param("param") String email);

错误 函数 jsonb_contains(jsonb,character variables) 不存在 提示:没有函数匹配给定的名称和参数类型。你可能 需要添加显式类型转换。

5. @Query(nativeQuery = true,value = "select * from table1 where user_details @> jsonb_build_object('email',:param )")
List<Entity> findByEmail(@Param("param") String email);

没有错误但没有给出结果。

6. @Query(nativeQuery = true,value = "select * from table1 where user_details ->>'email' = :param")
List<Entity> findByEmail(@Param("param") String email);

没有错误但没有给出结果。

7. @Query(nativeQuery = true,value = "select * from table1 WHERE jsonb_extract_path_text(user_details,'email') = :param")
List<Entity> findByEmail(@Param("param") String email);

没有错误但没有给出结果。

这些原生查询没有给我预期的结果。

请帮助我使用本机查询,我可以在其中将参数与查询绑定。 提前致谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。