У нас есть один столбец в БД, в котором сохранены значения JSON в формате String, например:
{"listOfPlaces" : [1,2,3], "segment" : 1}
Теперь из слоя JAVA с запросом UPDATE нам нужно обновить JSON. Например: нам нужно добавить
activityId : 1
здесь в сохраненном JSON БД.
Чтобы мы могли сохранить JSON как:
{"listOfPlaces" : [1,2,3], "segment" : 1, activityId : 1}
Я попытался использовать код, указанный ниже, но не уверен, что он точен или нет.
MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue(newFieldName, newFilterCriteriaForAddition.getName());
parameters.addValue(newFieldValue, newFilterCriteriaForAddition.getDefaultValue());
int update = namedParameterJdbcTemplate.update(Constant.SQL_TO_ADD_FILTER_CRITERIA_IN_SAVED_REPORT, parameters);
и запрос:
"UPDATE adv.sav_table SET filter_crtr = LEFT(rpt_filter_crtra, -1) + "||CONCAT("
+ ",\""
+ ":newFieldName:"+":"+newFieldValue"+"}"+") "




Нет необходимости в манипуляциях со строками:
Если этот столбец определен как jsonb (что и должно быть), вы можете просто объединить новое значение:
update adv.sav_table
SET filter_crtr = filter_crtr || '{"activityId":1}'
where ...;
Это можно сделать с помощью PreparedStatement:
update adv.sav_table
SET filter_crtr = filter_crtr || cast(? as jsonb)
where ...;
А затем с помощью
PreparedStatement pstmt = connection.prepareStatement("UPDATE ...");
psmt.setString(1, "{\"activityId\":1}");
Вы можете получить текущее обязательное поле из базы данных, которая содержит JSON, и заменить его новым JSON с помощью запроса UPDATE.
и чтобы добавить новую запись в JSON, вы можете попробовать это ->
вар объект = {};
объект = { «1»: «а», «2»: «б» };
объект["3"] = "с";
Нам нужно сделать это по всей таблице в каждой строке. Таким образом, сначала получить этот столбец, а затем добавить новую запись невозможно.