JSON 使用 Hibernate 在 PostgreSQL 中搜索关键字
JSON key search in PostgreSQL using Hibernate
我有一个 JSON 字段 data
包含以下数据-
{"name":"xx"}
我想使用 Hibernate 对此字段执行全文搜索。有什么办法可以做到这一点?我遵循了一些示例,但对我没有任何帮助。
理想情况下,Hibernate 会原生支持通过 JPQL/HQL and/or 条件查询在 JSON 对象内部进行查询。目前 (5.0.1) 似乎并非如此。
目前您似乎需要通过以下方法之一使用本机查询:
在映射中定义一个 @NamedNativeQuery
然后使用 EntityManager.createNamedQuery
到 运行 它;或
展开EntityManager
,展开下面的Session
,然后使用JDBC
如果您使用的是本机 Hibernate 接口而不是 JPA 接口,则有 Hibernate 等同于上述所有 - 映射中的命名本机查询,通过 Session
对象创建本机查询,或展开 Session
得到 java.sql.Connection
.
在所有这些情况下,您需要使用 PostgreSQL 特定的运算符,如 ?
和 ->>
来查询 json 和常规 SQL,而不是 JPQL/HQL。参见 postgresql json operators。请注意,JSON 功能是在 9.3 中引入的,并在 9.4 和 9.5 中得到了增强,因此请检查您的版本是否具有您需要的功能。
例如,您可以在 9.4+ 中使用 myjsoncolumn ? 'key'
和 jsonb
。对于普通 json
类型,您需要使用 (myjsoncolumn -> 'key') IS NULL
。使用 ->
而不是 ->>
很重要,因为 ->
returns 对于像 {"a":null}
这样的对象,一个 json 空对象,另一个 returns NULL
,所以你分不清{"a":null}
和{}
。
我有一个 JSON 字段 data
包含以下数据-
{"name":"xx"}
我想使用 Hibernate 对此字段执行全文搜索。有什么办法可以做到这一点?我遵循了一些示例,但对我没有任何帮助。
理想情况下,Hibernate 会原生支持通过 JPQL/HQL and/or 条件查询在 JSON 对象内部进行查询。目前 (5.0.1) 似乎并非如此。
目前您似乎需要通过以下方法之一使用本机查询:
在映射中定义一个
@NamedNativeQuery
然后使用EntityManager.createNamedQuery
到 运行 它;或展开
EntityManager
,展开下面的Session
,然后使用JDBC
如果您使用的是本机 Hibernate 接口而不是 JPA 接口,则有 Hibernate 等同于上述所有 - 映射中的命名本机查询,通过 Session
对象创建本机查询,或展开 Session
得到 java.sql.Connection
.
在所有这些情况下,您需要使用 PostgreSQL 特定的运算符,如 ?
和 ->>
来查询 json 和常规 SQL,而不是 JPQL/HQL。参见 postgresql json operators。请注意,JSON 功能是在 9.3 中引入的,并在 9.4 和 9.5 中得到了增强,因此请检查您的版本是否具有您需要的功能。
例如,您可以在 9.4+ 中使用 myjsoncolumn ? 'key'
和 jsonb
。对于普通 json
类型,您需要使用 (myjsoncolumn -> 'key') IS NULL
。使用 ->
而不是 ->>
很重要,因为 ->
returns 对于像 {"a":null}
这样的对象,一个 json 空对象,另一个 returns NULL
,所以你分不清{"a":null}
和{}
。