Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Hibernate在PostgreSQL中搜索JSON键_Java_Hibernate_Postgresql_Full Text Search - Fatal编程技术网

Java 使用Hibernate在PostgreSQL中搜索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运行它;或

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

{"name":"xx"}

我想使用Hibernate对此字段执行全文搜索。我有什么办法可以做到这一点吗?我遵循了一些示例,但没有任何效果。

理想情况下,Hibernate将具有通过JPQL/HQL和/或Criteria查询内部JSON对象的本机支持。目前情况似乎并非如此(5.0.1)

目前,您可能需要使用以下方法之一使用本机查询:

  • 或其变体之一

  • 在映射中定义一个,然后使用
    EntityManager.createNamedQuery
    运行它;或

  • 打开
    EntityManager
    ,打开下面的
    会话
    ,然后使用JDBC

如果您使用的是本机Hibernate接口而不是JPA接口,那么映射中的所有上述本机查询都有Hibernate等价物,可以通过
会话
对象创建本机查询,或者展开
会话
以获得
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。