Postgres JSON类型的JPA2 / Hibernate Criteria或CriteriaQuery

时间:2014-12-22 17:09:37

标签: json hibernate postgresql jpa-2.0

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

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

此查询结合了普通列和JSON列。

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

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

1 个答案:

答案 0 :(得分:2)

唯一的方法是为SQLFunction表达式编写自定义CAST(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)";
}

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

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