最佳答案
理想情况下,Hibernate将通过JPQL / HQL和/或Criteria查询对JSON对象内部进行查询.目前情况似乎并非如此(5.0.1).
> Use EntityManager.createNativeQuery
或其中一个变种;
>在映射中定义@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中得到增强,因此请检查您的版本是否具有所需的功能.
例如,你可以使用myjsoncolumn吗? jsonb在9.4中的’key’.对于普通的json类型,您需要使用(myjsoncolumn – >’key’)IS NULL.使用 – >非常重要不 – >>因为 – >为像{“a”:null}这样的对象返回一个json null对象,另一个返回NULL,所以你不能区分{“a”:null}和{}之间的区别.