postgresql - JPA 支持查询 Postgres JSON 字段

标签 postgresql hibernate jpa jsonb

JPA 中是否已经支持处理对 JSON 字段的查询,如下所示:

select * from person where (info ->> 'age')::numeric = 40;

select * from person where info ->> 'firstName'= 'Cabalo';

我正在使用 hibernate 5(在 spring-data-jpa 之后)和 Postgres 9.4

最佳答案

JPA 本身不支持转换 JSON 或 JSONB 字段。您将需要创建一个 javax.persistence.AttributeConverter 以往返于 JSON/JSONB。另一个需要记住的重要类是 org.postgresql.util.PGobject ,这对于转换到/从 jsonb` 字段很有用。

其次,JPA 只是一个 API。您将需要自定义您的底层实现,以便充分利用这种类型。您需要创建 org.hibernate.dialect.function.SQLFunction 才能使用 JSON/JSONB 函数。您需要在 org.hibernate.dialect.PostgreSQL95Dialect 中将其与您创建的 AttributeConverter 类型一起注册。

另一个注意事项:在创建 SQLFunction 时,将您正在使用的 json/jsonb 运算符称为 native 函数调用或别名可能会有所帮助。包含 ? 运算符的 native 查询有被破坏的趋势,即使它被正确转义。

参见 Hibernate JavadocsJPA Javadocs .

关于postgresql - JPA 支持查询 Postgres JSON 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35205707/

相关文章:

jpa - JSF2 + EJB3 + CRUD 使用用户控件来提交或回滚?

MySQL/JPA : How create a correclty relation and cascade?

java - 具有基于仲裁的同步复制的 JDBC Postgres 故障转移

ruby-on-rails - Rake 中止,无法连接到 postgresql : connection refused

sql - generate_series() 在 PostgreSQL 中无法按预期方式使用 sum

java - 在 Hibernate 中使用 Spring boot 配置的 Jackson Objectmapper

java - 了解 JTA Spring 和 Bitronix

sql - 计算祖先数组后代数量的最佳方法?

java - 未检测到命名参数

java - 在 Spring 获取 org.springframework.orm.ObjectOptimisticLockingFailureException