Java 使用Hibernate在PostgreSQL中搜索JSON键
我有一个JSON字段Java 使用Hibernate在PostgreSQL中搜索JSON键,java,hibernate,postgresql,full-text-search,Java,Hibernate,Postgresql,Full Text Search,我有一个JSON字段data,其中包含以下数据- {"name":"xx"} 我想使用Hibernate对此字段执行全文搜索。我有什么办法可以做到这一点吗?我遵循了一些示例,但没有任何效果。理想情况下,Hibernate将具有通过JPQL/HQL和/或Criteria查询内部JSON对象的本机支持。目前情况似乎并非如此(5.0.1) 目前,您可能需要使用以下方法之一使用本机查询: 或其变体之一 在映射中定义一个,然后使用EntityManager.createNamedQuery运行它;或
data
,其中包含以下数据-
{"name":"xx"}
我想使用Hibernate对此字段执行全文搜索。我有什么办法可以做到这一点吗?我遵循了一些示例,但没有任何效果。理想情况下,Hibernate将具有通过JPQL/HQL和/或Criteria查询内部JSON对象的本机支持。目前情况似乎并非如此(5.0.1) 目前,您可能需要使用以下方法之一使用本机查询:
- 或其变体之一
- 在映射中定义一个,然后使用
运行它;或EntityManager.createNamedQuery
- 打开
,打开下面的EntityManager
,然后使用JDBC会话
会话
对象创建本机查询,或者展开会话
以获得java.sql.Connection
在所有这些情况下,您需要使用特定于PostgreSQL的操作符,如?
和->
来查询json和常规SQL,而不是JPQL/HQL。看见请注意,JSON功能在9.3中引入,并在9.4和9.5中得到增强,因此请检查您的版本是否具有所需的功能
例如,您可以使用
myjsoncolumn?“在9.4+中用jsonb
键“
。对于普通的json
类型,您需要使用(myjsoncolumn->'key')为NULL
。使用->
而不是->
很重要,因为->
为{a:null}
这样的对象返回一个json空对象,另一个返回null
,所以您无法区分{a:null}
和{}
您尝试过Hibernate原生SQL查询吗?我不同意投票结果,这既不是过火也不是离题。这完全是明智的。谢谢。这就是我想知道的。我只是想说明,除了EntityManager.createNativeQuery之外,没有其他方法。Thanks@Justin您可以在映射中创建命名本机查询,然后稍后使用createNamedQuery
运行它。这样,如果/当Hibernate为JSON对象内的查询添加了JPQL/HQL支持时,您可以稍后将@namedNavieRequesty
更改为普通的@NamedQuery
。这可能是我会做的,除非我在做大量的动态SQL。