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
答案 0 :(得分:0)
由于JPA中不提供对“ JSON”字段的JPA支持,因此不支持查询它们。 JPA允许用户使用SQL,因此可以使用非常特定的列类型以及相关的查询方法。这就是RDBMS特定的。无法想象它将在任何JPA规范中都可以实现,但是可以由JPA提供者作为供应商扩展来支持
答案 1 :(得分:0)
像JPA这样的标准的重点是要在所有数据库供应商中都支持一组通用功能。由于对JSON字段的查询是特定于供应商的功能,在本例中为Postgres,因此很难认为它会在JPA中找到它的实现,直到它被认为是所有关系SQL数据库的标准功能为止。
答案 2 :(得分:0)
JPA本身不支持转换JSON或JSONB字段。您需要创建一个javax.persistence.AttributeConverter
才能往返于JSON / JSONB。要记住的另一个重要类是org.postgresql.util.PGobject
, which is useful for converting to/from
jsonb`字段。
第二,JPA只是一个API。您将需要自定义基础实现,以便充分利用此类型。您将需要创建org.hibernate.dialect.function.SQLFunction
才能使用JSON / JSONB函数。您需要将其与在AttributeConverter
中创建的org.hibernate.dialect.PostgreSQL95Dialect
类型一起注册。
另一注:在创建SQLFunction
时,将您用作本地函数调用或别名的json / jsonb运算符引用是有益的。包含?
运算符的本机查询有一种趋势,即使正确地对其进行了转义,也很容易出错。