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 查询有被破坏的趋势,即使它被正确转义。
关于postgresql - JPA 支持查询 Postgres JSON 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35205707/