JPA и JSON оператор нативный запрос на обновление - PullRequest
0 голосов
/ 01 мая 2019

Я пытаюсь заставить этот запрос работать в JPA:

UPDATE billing_log_criteria
SET value = jsonb_set(value, '{cubPersonId}', '"12778269"')
where value ->> 'cubPersonId' = '12778268';

Он отлично работает с postgresql, но когда я интегрирую его с JPA, я получаю следующую ошибку:

Причинаby: org.postgresql.util.PSQLException: ОШИБКА: функция jsonb_set (jsonb, неизвестно, символ меняется) Подсказка: ни одна функция не соответствует заданному имени и типу аргумента.Возможно, вам понадобится добавить явные приведения типов.

Ниже приведен запрос, который я пытался

@Modifying(clearAutomatically=false)
@Transactional
@Query(value = "UPDATE billing_log_criteria "
        + "SET value = jsonb_set(value, '{cubPersonId}',  jsonb_set(value, '{cubPersonId}', :newId)) "
        + "where value ->> 'cubPersonId' = :oldId", nativeQuery = true)
void updateCubPersonId(@Param("newId") String newId,@Param("oldId") String oldId);

, вызывая вот так

String oldId = "12778269";
updateCubPersonId( "'\" 12778268l \"'",oldId);

1 Ответ

0 голосов
/ 01 мая 2019

В psql аргумент '{cubPersonId}' автоматически преобразуется в text[].В JDBC это не так, и вам нужно явно, например:

@Query(value = "UPDATE billing_log_criteria "
        + "SET value = jsonb_set(value, '{cubPersonId}'::text[],  jsonb_set(value, '{cubPersonId}'::text[], to_jsonb(:newId::text))) "
        + "where value ->> 'cubPersonId' = :oldId", nativeQuery = true)
...