Не следует заключать #{}
в одинарные кавычки, так как он станет частью литерала, а не заполнителя. то есть
external_group = external_group || '{"service_name": "?"}' where ...
Итак, в PreparedStatement
будет только один заполнитель, и вы получите ошибку.
Правильный способ - объединить #{}
в SQL.
Вам также может понадобиться явное приведение литерала к типу jsonb
.
@Update({
"update service_user_assn set",
"external_group = external_group",
"|| ('{\"service_name\": \"' || #{service_name} || '\" }')::jsonb",
"where user=#{user} and",
"service_name= (select service_name from services where service_name='Google')"})
Выполняемый SQL будет выглядеть следующим образом.
external_group = external_group || ('{"service_name": "' || ? || '"}')::jsonb where ...