Postgres JSON类型的JPA2/Hibernate Criteria或CriteriaQuery

Ion*_*chy 9 postgresql json hibernate jpa-2.0

我有一个带有JSON字段的PostgreSQL数据库.我想构建一个通过JSON表达式限制结果的查询.我可以在psql中制定这个查询而不会出现问题:

select * from mytable where relation_id=100 AND CAST(jsonField->'key' AS float) >= 10.0;
Run Code Online (Sandbox Code Playgroud)

此查询组合了普通列和JSON列.

我不知道如何使用Criteria或Criteria查询在Hibernate中启动它.理论上,我可以使用HSQL语言,但我几乎可以肯定,当涉及到JSON列时,它会失败.

有谁知道如何解决这个问题?

Chr*_*kov 2

唯一的方法是为表达式编写自定义内容SQLFunctionCAST(jsonField->'key' AS float)然后在 JPQL 中使用它。

public String render(Type firstArgumentType, List args, SessionFactoryImplementor factory) throws QueryException {
    return "CAST(" + args.get(0).toString() + "->'" + args.get(1).toString() + "' AS float)";
}
Run Code Online (Sandbox Code Playgroud)

在方言中注册并registerFunction("json_float", new JsonFloatFunction())在查询中使用它,例如

SELECT o FROM MyTable o WHERE o.relation.id = 100 AND JSON_FLOAT(o.jsonField, 'key') >= 10.0
Run Code Online (Sandbox Code Playgroud)