【发布时间】:2017-08-11 14:12:12
【问题描述】:
我正在尝试让这个查询在 JPA 中工作:
SELECT * FROM contrat WHERE contrat_json @> '{"nom" :"hever"}';
它与 postgresql 完美配合,但是当我将它与 JPA 集成时,我收到以下错误:
具有该位置 [1] 的参数不存在
我的代码:
@Transactional
@Query(nativeQuery = true,value = "select p from Contrat p where contrat_json @> '{\"nom\":\":nom\"}'")
public List<Contrat> findByNomRestrict(@Param("nom") String nom);
我认为它无法识别 @> 尽管原生查询,你有什么想法吗?
【问题讨论】:
-
您使用的是哪个 jpa 版本?
-
如果您在 spring 存储库方法中声明了
@Param参数,您也应该在查询本身中提及它,例如contrat_json @> jsonb_build_object('nom', :nom)--:nom在字符串文字中仍然意味着字符::nom,不是绑定参数。 -
我使用 spring starter jpa 1.5.1。 @pozs 我使用了你的方法,但我遇到了这个错误:“函数 jsonb_build_object(unknown, character varying) 不存在索引:没有函数匹配给定的名称和参数类型。你可能需要添加显式类型转换。”
-
@GuillaumeHochart 该函数存在于 PostgreSQL 9.5+ -- 对于 9.4,您可以使用
CAST(json_build_object(...) AS jsonb)-- 对于 9.3-,无论如何都没有@>运算符 :) -
@GuillaumeHochart 否,9.4 的函数是
json_build_object(没有 B)。阅读我的答案。请。
标签: java json postgresql jpa hibernate-native-query