java - 带有 Hibernate 的 Postgres jsonb

标签 java postgresql hibernate

我有下面的 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/

相关文章:

java - 代码中的 PMD 问题 - 它们很重要吗?

java - 如何从 SOAP header 获取 header 元素名称和值?

sql - 用于删除括号的 PostgreSQL regexp_replace()(示例)

java - 具有 Hibernate 二级缓存的 Jhipster Multi-Tenancy

java - 什么是适合 Hibernate 初学者的最佳电子书?

java - 带有基于 Hibernate 注释的 Eclipse Juno 的 HQL 编辑器

java - 如何翻转这把尺子?

java - 即使文件存在 FileNotFoundException

sql - PostgreSQL Where 计数条件

postgresql - psql:无法连接到服务器:Windows 中的连接被拒绝 (0x0000274D/10061)