JPA CriteriaBuilder中的自定义表达式

时间:2016-08-03 12:36:47

标签: jpa criteria-api

我有一个带有String字段的实体(存储JSON),需要将其数据库列中的值与另一个值进行比较。问题是这个数据库列的类型是TEXT,但实际上它包含JSON。那么,有没有办法写这样的东西?即我需要将我的值与TEXT列的JSON字段进行比较。

criteriaBuilder.equal(root.get("json_column").customExpressionn(new Expression{
   Object handle(Object data){
    return ((Object)data).get("json_field")
}
}), value)

1 个答案:

答案 0 :(得分:2)

假设您有一个版本为>的MySQL服务器5.7.x

我遇到了同样的问题。我想在JSON对象列中找到具有JSON字段值的类的所有实体。

对我有用的解决方案就是这样的(抱歉通过电话打字)

(root, query, builder)->{
    return builder.equal(
        builder.function("JSON_EXTRACT", String.class, root.get("myEntityJsonAttribute"), builder.literal("$.json.path.to.json.field")),
        "searchedValueInJsonFieldOfJsonAttribute"
    )
}