使用Hibernate在PostgreSQL中进行JSON密钥搜索

Jus*_*tin 5 java postgresql full-text-search hibernate

我有一个JSON字段data,其中包含以下数据-

{"name":"xx"}
Run Code Online (Sandbox Code Playgroud)

我想使用Hibernate在此字段上执行全文搜索。有什么办法可以实现?我遵循了一些示例,但没有任何帮助。

Cra*_*ger 3

理想情况下,Hibernate 将原生支持通过 JPQL/HQL 和/或 Criteria 查询在 JSON 对象内进行查询。目前看来情况并非如此(5.0.1)。

目前看来您需要使用以下方法之一来使用本机查询:

如果您使用本机 Hibernate 接口而不是 JPA 接口,则 Hibernate 等效于所有上述内容 - 映射中命名的本机查询、通过对象创建本机查询Session,或解包Session以获取java.sql.Connection.

在所有这些情况下,您都需要使用 PostgreSQL 特定的运算符,例如?->>来查询 json 和常规 SQL,而不是 JPQL/HQL。请参阅postgresql json 运算符。请注意,JSON 功能是在 9.3 中引入的,并在 9.4 和 9.5 中得到增强,因此请检查您的版本是否具有您需要的功能。

例如,您可以在 9.4+ 中使用myjsoncolumn ? 'key'with 。jsonb对于普通json类型,您需要使用(myjsoncolumn -> 'key') IS NULL. 使用->not很重要->>,因为->对于像 之类的对象返回一个 json null 对象{"a":null},另一个返回NULL,所以你无法区分{"a":null}和 之间的区别{}