我有一个带有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列时,它会失败。
有没有人知道如何解决这个问题?
答案 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