Собственный запрос на Spring Boot: Mixing of?параметры и другие формы, такие как? 1 не поддерживается - PullRequest
1 голос
/ 23 мая 2019

Я выполняю собственный запрос на jpa весенней загрузки с Postgresql / PostGIS.

Запрос на postgresql работает нормально:

WITH data AS (SELECT '{ "type": "Point", "coordinates": [102.0, 0.5]

     }'::jsonb AS fc) 
UPDATE dopigp.disciplinare_aree SET area_da_validare=( 
SELECT 
  ST_Union(ST_AsText(ST_GeomFromGeoJSON(feat->>'geometry'))) AS geom 
FROM ( 
  SELECT  
    CASE  
        WHEN fc ? 'features' THEN jsonb_array_elements(fc->'features') 
        WHEN fc ? 'geometry' THEN (fc) 
        ELSE jsonb_build_object('geometry', fc) 
    END  
    AS feat 
  FROM data 
) AS f 
) WHERE id_disciplinare=251 

В Spring Boot выдают ошибку: Смешивание? параметры и другие формы, такие как? 1, не поддерживаются

@Transactional
@Modifying
@Query(value = "WITH data AS (SELECT (?2)\\:\\:jsonb AS fc)\n" + 
        "UPDATE dopigp.disciplinare_aree SET area_da_validare=(\n" + 
        "SELECT\n" + 
        "  ST_Union(ST_AsText(ST_GeomFromGeoJSON(feat->>'geometry'))) AS geom\n" + 
        "FROM (\n" + 
        "  SELECT \n" + 
        "   CASE \n" + 
        "       WHEN fc ? 'features' THEN jsonb_array_elements(fc->'features')\n" + 
        "       WHEN fc ? 'geometry' THEN (fc)\n" + 
        "       ELSE jsonb_build_object('geometry', fc)\n" + 
        "   END \n" + 
        "   AS feat\n" + 
        "  FROM data\n" + 
        ") AS f\n" + 
        ") WHERE id_disciplinare=(?1) \n",
        nativeQuery = true)
void upload(Integer idDisciplinare, String geoJSON);

Ответы [ 2 ]

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

Похоже, что избежать знака вопроса невозможно.Поэтому единственное решение состояло в том, чтобы создать пользовательский оператор для замены знака вопроса, как указано здесь , и использовать его в собственном запросе вместо "? ".

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

Вы должны сбежать?в случае, потому что это заполнитель параметра, но вместо \ вы должны использовать?:

 WHEN fc ??
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...