Пользовательское выражение в JPA CriteriaBuilder
У меня есть Entity с полем String (хранит JSON), и мне нужно сравнить значение из его столбца базы данных с другим значением. Проблема в том, что тип этого столбца базы данных - TEXT, но на самом деле он содержит JSON. Так есть ли способ написать что-то подобное? Т.е. мне нужно сравнить мое значение с некоторым полем JSON из столбца TEXT.
criteriaBuilder.equal(root.get("json_column").customExpressionn(new Expression{
Object handle(Object data){
return ((Object)data).get("json_field")
}
}), value)
1 ответ
Предположим, у вас есть сервер 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"
)
}