我有下面的 Postgres 查询,当通过 psql 客户端运行时它工作正常 -
select id,jbag
from mydb.mytable e
where (e.jbag->'myCodes')::jsonb @> '{"C":"C", "T":"T", "L":"L"}';
但是,当我通过创建一个 org.Hibernate.query 对象来运行查询时,我得到了一个类似于此的异常 -
org.postgresql.util.PSQLException:错误:运算符不存在:jsonb @> 字符变化 提示:没有运算符匹配给定的名称和参数类型。您可能需要添加显式类型转换。 位置:144
请帮忙。我已经阅读了以下关于创建新类型的帖子,并且 Hibernate 不支持 postgres JSON 运算符 -
http://www.thoughts-on-java.org/persist-postgresqls-jsonb-data-type-hibernate/
但是有没有简单的解决办法呢?
谢谢
最佳答案
我在 postgres 中使用 json_build_object 运算符构建一个 JSON 对象并在这样的查询中使用它解决了这个问题 -
select id,jbag
from mydb.mytable e
where (e.jbag->'myCodes')\\:\\:jsonb @> json_build_object(:jsonStr)\\:\\:jsonb;
我将上面的查询字符串存储在一个 Java StringBuffer 对象中,就像这样 -
StringBuilder buf = new StringBuilder(); buf.append("选择.....
......append("(e.jbag->'myCodes')\:\:jsonb @> json_build_object(:jsonStr)\:\:jsonb ")
其中 jsonStr 是这样定义的 Java String 对象 -
String jsonStr = new String("'C', 'C', 'T', 'T'");
请原谅我没有发布完整的查询 - 我的实际查询很长。注意用于转义双冒号的双\
然后使用Hibernate的setParameter方法设置查询中的对象-
query2.setParameter("jsonStr", jsonStr);
其中 query2 是我的 org.Hibernate.Session 对象,最后在查询对象上调用了 list 方法 -
List<String> statusCodeList = query2.list();
下面是关于运算符的 postgres 文档页面 -
https://www.postgresql.org/docs/9.4/static/functions-json.html
关于java - 带有 Hibernate 的 Postgres jsonb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40511636/