我有一个带有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)
答案 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"
)
}