Пользовательское выражение в 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"
    )
}
Другие вопросы по тегам