JPA CriteriaBuilder中的自定义表达式

JPA CriteriaBuilder中的自定义表达式,jpa,criteria-api,Jpa,Criteria Api,我有一个带有字符串字段(存储JSON)的实体,需要将其数据库列中的值与另一个值进行比较。问题是这个数据库列的类型是文本,但实际上它包含JSON。那么,有没有办法写出这样的东西?也就是说,我需要将我的值与文本列中JSON的某个字段进行比较 criteriaBuilder.equal(root.get("json_column").customExpressionn(new Expression{ Object handle(Object data){ return ((Object)

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

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

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

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

对我有效的解决方案是类似的(对不起,用电话打字)


使用CAST?使用函数?@NeilStockton,你是说调用sql函数,解析JSON并返回我的字段?我希望找到一些CriteriaAPI解决方案。@NeilStockton,我的实体?这有什么帮助?我的实体只有
String
字段,其中包含JSON。我不知道您当时想要实现什么。您有一个存储字符串值的字符串字段,存储在文本列中,并希望将其与某个值进行比较。您不需要任何自定义处理程序,只需执行“equal()”。如果您想要比较文本字符串的某些部分。。。然后给出数据存储中文本字符串的示例以及要比较的部分with@NeilStockton,以下是此字符串的示例:“{field1:\'value\”,field2:\'value2\'}”。我需要比较一些我的字符串和field2的值。嗨,我发现你的帖子很有用,你能帮我用条件建立下面的查询吗,就像你在上面分享的一样?从
audit_log
中选择*其中JSON_包含_路径(myEntityJsonAttribute'one',“$.JSON.PATH.to.JSON.field”);
(root, query, builder)->{
    return builder.equal(
        builder.function("JSON_EXTRACT", String.class, root.get("myEntityJsonAttribute"), builder.literal("$.json.path.to.json.field")),
        "searchedValueInJsonFieldOfJsonAttribute"
    )
}